Adam Summers wrote:
> Hi Tom & Widget Afficionados.
> Thanks for the help so far.
> My problem is now this:
>     From this code (which Tom supplied), how do I code the logic (in
> bold)      
>     def _toFieldValue(self, input):
>         data = super(ImageWidget, self)._toFieldValue(input)
>         if data is not None:
>             img = Image(data)
>             notify(ObjectCreatedEvent(img))
>             return img
>       *else: #data is None, ie. the File input field was left blank and we 
> don't want to 
>           #replace the current value of the Image Widget with an empty value.
>           currentImg = the Image object which the field is being rendered for
>           return currentImg 
> *
> I can't rely on
>       field = self.context
>             image = field.get(field.context)
> logic to find the data, because my schema can contain:
> class Iclaim(IContained):
>       """Claim"""
>       supDoc = List(title=_(u"Supporting Docs List"), 
> value_type=Object(IImage, __name__='ImgItem', title=_(u"Image")))
>       img = Object(IImage, title=_(u"Single img"), required=False)
>     And hence, the self.context.context points to the claim object, not
> the list inside when rendering supDoc

Hi Adam,
You can rely on:

  field = self.context
  image = field.get(field.context)

because the widget is for an attribute object of type IImage.

Your supDoc attribute object is a List Type - not an IImage.
In this case you'd need another widget - for a list of IImage.

I wouldn't been too keen to tackle the html work effort and would
probably look at an alternative along the lines of...

class IImageList(IContainer):

class IClaim(IContained):

Make supDoc traversable, then you wouldn't need the custom widget here
because you can store Images directly in supDoc view with the

Zope3-users mailing list

Reply via email to