[Zope3-Users] searching and relations

Gary Poster gary at zope.com
Sun Jul 23 09:33:52 EDT 2006


On Jul 23, 2006, at 4:12 AM, Darryl Cousins wrote:

> Gary Poster wrote:
>> If the relationship is intrinsic to one object's data model but not
>> to the other's, then it makes sense to have a Python pointer on the
>> first object.
>
> Hi Gary,
>
> Am I right that 'a Python pointer on the first object' is defined by
> simply defining the schema field, eg::
>
> 	mypointer = Object(
> 			title="Pointer to object",
> 			schema=IInterfaceOfTheTarget)
>
> Then everything else will fall into place. I could even use formlib to
> edit the object being pointed to from within a form editing the 'first
> object'.
>
> The second object would not even know it is pointed to. For it to  
> know I
> would need to use a relationship as you go on to discuss.
>
> Have a correctly understood?

Yes, precisely; and for what it is worth, the Object schema value  
lets formlib work, and specifies part of your software's "contract",  
but is not necessary for the most basic story.  The simplest clear  
case (Where `app` represents some ZODB folder, like the application  
root):

class DemoSubject(persistent.Persistent):
     pass

class DemoObject(persistent.Persistent):
     pass

app['demo'] = DemoSubject()
app['demo'].mypointer = DemoObject()

By the way, a small but possibly important subtlety about the object  
widgets that are associated with the schema object fields is that  
(unless you manage your form pretty carefully) they change value by  
creating new instances of the sub-object and replacing it on the main  
object, not by modifying an old sub-object instance, IIRC.

Sometimes Choice fields with a custom vocabulary or source are what  
you want, if you want to make a pointer to an object that already  
exists somewhere in the database.

Gary


More information about the Zope3-users mailing list