Hi Tim,

Tim Cook schrieb:
> Thanks for all the assistance.
> On Fri, 2009-01-16 at 18:05 +0100, Martijn Faassen wrote:
>> Yes, you do create new schema fields by subclassing from Field.
>> It's just that we saw you putting a field not in a schema but in what
>> looked like a concrete object. 
> This has given me a BIG pause while I'm working on a simpler example.
> It may actually solve the problem.  
> Are you saying that in order to create a Field that can be used as an
> attribute of another class; I should define it in an interface and ONLY
> in an interface?
> Such like pseudo:
> import Field
> class IAbc(Interface)
> myNewField = Field(
>  ........
> and then when I need to use it in a class, simply state that that class
> implements(IAbc)?

that's what Dan Korostelev said early in the thread: Use the Field only 
in a schema definition. You define your schema in an interface class. 
The interface class describes the interface (fields, attributes, 
methods) that a class implements.

from zope.interface import Interface, implements
from zope.schema import TextLine

class IMyTitleSchema(Interface):

     title = TextLine(...)

class MyTitleClass(object or some other baseclass):


     title = u""

The interface tells other components, e.g. forms: An object instanciated 
from MyTitleClass has an attribute 'title', and title is a TextLine. So 
a form can render the correct widget. Other components do other things 
with this information, like validation when the title attribute is written.

You never use a schema field in something other than an interface class. 
   Don't do:

class MyTitleClass(...):


     title = TextLine(...)

obj = MyTitleClass()

Sure you can have specialized fields that subclass from Field, TextLine, 
or another base class. E.g. RegistrationNumber(TextLine) that takes care 
to validate the input for a special format. But you use them in an 
interface class, not the class that implements the interface.


Zope-Dev maillist  -  Zope-Dev@zope.org
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope )

Reply via email to