[Zope3-Users] Multi-level object structure
Markus Kemmerling
markus.kemmerling at meduniwien.ac.at
Fri Aug 8 13:29:07 EDT 2008
Am 08.08.2008 um 17:24 schrieb Jeronimo Jacobo:
> Hi
> I am new in Zope 3 world, i have read the book " Web Component
> Development with Zope 3" and I am designing a Zope application
> which involves a multiple-level object structure in which the
> father class has multiple instances of son class and the son class
> has multiple objects of the grandson class.
> Up to now i have managed to construct something like this:
>
> class IGrandson(Interface):
> age=Int(
> title=_(u'Age'),
> description=_(u'The age of the Grandson'),
> required=True
> )
> name=TextLine(
> title=_(u'Name'),
> description=_(u"The name of the Grandson"),
> required=True
> )
>
> class ISon(Interface):
> name=TextLine(
> title=_(u'Name'),
> description=_(u'Name of the Son'),
> required=True,
> )
> grandsons=List(
> title=_('Grandsons'),
> description=_("A list of Grandsons"),
> required=False,
> value_type=Object(
> title=_('Grandson'),
> schema=IGrandson
> )
> )
>
> However, in this way i can only create Sons. Grandsons will be
> added as an element of the Son''s grandsons list. If I want to
> create a Grandson without father, how can I add it later to the
> Son''s list?
>
> Is the List the most effective way to store objects? I have tried
> with BTrees, but then i have problems to construct the widgets and
> views to add elements to the BTree and i think BTrees is not an
> interfaces so I cannot do something like:
>
> grandsons=OOBTree(
> title=_('Grandsons'),
> description=_("A list of Grandsons"),
> required=False,
> value_type=Object(
> title=_('Grandson'),
> schema=IGrandson
> )
> )
>
> nor
>
> grandsons=Object(
> title=_('Grandson'),
> schema=OOBTree
>
> )
>
> Also, considering that the structure can grow up to four
> generations (granpa, father, son, grandson), what will be the best
> approach to achieve this mult-level structure?
>
> My initial idea was to present in the first view the Granpas. When
> selecting one of them, its attributes will be shown, among them its
> sons (the Fathers). Then when selecting one of them, the process
> will repeat until the grandson.
>
> I appretiate much your help and ideas. Thanks in advance.
>
> Jeronimo
You could implement everybody as a container for objects of the same
type as the container itself, something like this:
IGenealogy(IContainer):
...
IPerson(IContained, IContainer):
contains('. IPerson')
containers('. IPerson', IGenealogy)
age=Int(
title=_(u'Age'),
description=_(u'The age of the Person'),
required=True
)
name=TextLine(
title=_(u'Name'),
description=_(u"The name of the Person"),
required=True
)
This way the father-son relation will only be a matter of the parent-
child relation and not a feature of the defining interface itself
(some day every son may become a father himself ;-).
Regards,
Markus Kemmerling
More information about the Zope3-users
mailing list