[Grok-dev] Problems rendering zope.schema.List
Sebastian Ware
sebastian at urbantalk.se
Thu Jul 5 10:11:26 EDT 2007
Wonderful! It works. It would have helped if it was mentioned in the
docstring of the interface, or any of the accompanying help files... :)
Mvh Sebastian
5 jul 2007 kl. 15.41 skrev Leonardo Rochael Almeida:
> On 7/5/07, Luciano Ramalho <luciano at ramalho.org> wrote:
>> This is a gotcha that got me before... Philikon helped me: add a
>> default argument to the list constructor, like this:
>>
>> creators = schema.List(title=u"Authors", required=False,
>> value_type=schema.TextLine(),
>> default=[])
>>
>> The problem is that the list must never be None. When empty, it
>> must be [].
>>
>> IMHO, it's a usability bug in the Zope3 API. If the list fails
>> miserably when it's None, then the default=[] should be automatic. Or
>> is there some ratinonale for the way things are?
>
> I suppose the problem is that you're specifying a mutable object as
> the default for a field. This could cause you problems if someone
> mutates this value afterward.
>
> In a simple web app where all interactions are caused by form
> handling, it could well be the case that no one will mutate the
> default object (I think the default widget always creates a new list
> when returning the value). But suppose some piece of code takes an
> object that was set with the default value and manipulates the list
> directly, this would change the default value for the schema itself.
>
> All schema fields like List contain a reference to the type of the
> object they're supposed to create (defaults to the standard "list"). I
> think the proper default behaviour, in this case, would be to set the
> default value with a fresh instance of the underlying type. This could
> be done by making the "default" attribute of the schema field instance
> be a property.
>
> Cheers, Leo
More information about the Grok-dev
mailing list