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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.