Re: Zwei ArrayField Fragen: Feldzugriff und Fehler bei ImageField
"Jens W. Klein" <[email protected]>
| Newsgroups | gmane.comp.web.zope.german |
|---|---|
| Organization | Klein & Partner KEG, BlueDynamics Alliance |
| Message-ID | <1241018242.6057.63.camel@minime> |
Am Mittwoch, den 29.04.2009, 16:55 +0200 schrieb Nico Grubert:
> Hallo Liste
>
> ich habe einen Archetypes Content-Typen für Plone (version: 3.1.7)
> entwickelt, der eine Liste (ArrayField) von je 3 Feldern ("bild",
> "bildunterschrift" und "textblock") enthält.
>
> Der Code sieht wie folgt aus:
>
> ArrayField(
> CompoundField(name='bilder', schema=atapi.Schema((
> atapi.ImageField(name='bild',
> label=u'Bild',
>
> searchable = 0,
> required = 0,
> max_size = (380, 220),
> allowable_content_types = ('image/gif','image/jpeg','image/png'),
> widget = atapi.ImageWidget(label = u'Bild'),
> ),
> atapi.StringField(name='bildunterschrift',
> accessor="getBildunterschrift",
> label = u'Bildunterschrift'),
> atapi.StringField(name='textblock',
> accessor="getTextblock",
> label = u'Textblock'),
> ),),
> ),
> widget=EnhancedArrayWidget(
> label=u"Bilder, Bildunterschriften und Text",
>
> ),
> size=2,
> ),
>
> Das klappt soweit alles ganz gut, aber ich stosse auf 2 Probleme:
>
> 1. Mir gelingt es nicht, den Inhalt der 2 'StringField' Felder
> "bildunterschrift" und "textblock" auszulesen. An die Grafik komme
> ich ohne Probleme heran.
>
> In einer Methode in der Klasse meines Content-Typen habe ich folgendes
> versucht:
>
> # Ein Beispiel Content Objekt (self) enthält 2 Paare von
> # ['bild', 'bildunterschrift', 'textblock']
> res = []
> f = self.Schema().getField('bilder')
> # f.getFields() ->
> # [[<Field bilder|size(integer:rw)>,
> # <Field bilder|bilder:000(compoundfield:rw)>,
> # <Field bilder|bilder:001(compoundfield:rw)>]]
> ff = f.getFields()[1:]
> # ff -> <Field bilder|bilder:000(compoundfield:rw)>
> # ff.Schema().fields() ->
> # [<Field bilder|bilder:000|bild(image:rw)>,
> # <Field bilder|bilder:000|bildunterschrift(string:rw)>,
> # <Field bilder|bilder:000|textblock(string:rw)>]
> for i in ff:
> # i -> <Field bilder|bilder:000(compoundfield:rw)>
> schema = i.Schema()
> # i.Schema().keys() -> ['bild', 'bildunterschrift', 'textblock']
> d = {}
> field_bild = schema.get('bild')
> d['bild'] = field_bild
> d['bild_tag'] = field_bild.tag(self) # klappt wunderbar
>
> field_bildunterschrift = schema.get('bildunterschrift')
> # -> <Field bilder|bilder:000|bildunterschrift(string:rw)>
> field_bildunterschrift_value = field_bildunterschrift.???
> # wie komme ich hier an den Wert, der in 'bildunterschrift' ist?
> # field_bildunterschrift.getBildunterschrift() -> Attribute Error
accessor werden nur auf dem content-object selber generiert soweit ich
weiss.
normalzugriff: field.get(instance)
bei dir also:
value = field_bildunterschrift.get(self)
aber andererseits:
hast du schonmal probiert self.getBilder() aufzurufen? damit solltest du
eine liste von dicts kriegen, wobei jedes dict jeweils {'fieldname':
'fieldvalue' } enthält. Im falle des bildes sollte es das per baseunit
umwickelte bild als value sein.
> Hat jemand eine Idee, wie ich an die Werte ran komme, die in den
> Textfeldern stehen?
>
>
> 2. Beim Bearbeiten eines erstellten Content Objektes erhalte ich einen
> Fehler: string object has no Attribute getContentType()
>
> Der Fehler resultiert aus:
> \Archetypes\skins\archetypes\widgets\image.pt
> Zeile 15: -> htacpt.find(img.getContentType())
>
> Wenn ich diese Bedingung rausnehme, klappt alles. Hat jemand eine
> Idee, was dort falsch läuft?
Ohne selber zu testen: Nein. Ich habe auch schon öfters Bilder in
ArrayFields gestopft, ging immer problemlos.
gruss Jens
--
Jens Klein
Software Architect
Managing Director, General Partner
+43 512 890077
BlueDynamics Alliance WEB APPLICATIONS, ZOPE, PLONE, HOSTING
Klein & Partner KEG production: concept, development, design
http://bluedynamics.com consulting: analysis, coaching, training
http://zoplo.com management: projects, process, community
_______________________________________________
zope mailing list
[email protected]
https://mail.dzug.org/mailman/listinfo/zope