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): contains(zope.app.image.interfaces.IImage) class IClaim(IContained): supDoc=Object(schema=IImageList) Make supDoc traversable, then you wouldn't need the custom widget here because you can store Images directly in supDoc view with the browser:containerView's. _______________________________________________ Zope3-users mailing list Zope3-users@zope.org http://mail.zope.org/mailman/listinfo/zope3-users