[Zope3-Users] Specifying object attributes at runtime from a selection of schemas.

Stephan Richter srichter at cosmos.phy.tufts.edu
Mon Feb 6 06:53:04 EST 2006


On Tuesday 24 January 2006 12:36, Alec Munro wrote:
> As part of an e-commerce system I am building, I need a way to specify
> a set of schemas that the purchaser must fill in data for. For
> example, in order to purchase product A, you need to select a paint
> colour, but in order to purchase product B, you must select 3 paint
> colours. I need a way for the site manager to specify this when adding
> products to the site.

I think this has little to do with the site manager. At least not directly.

> Currently, my plan for dealing with this is that I give all products a
> "product_attribute" property, which consists of a list of schemas.

I think what you want are product types. You can then assign a product type 
(by directlyProvides) for each type you support. Then use the ideas in 
zope.app.schemacontent to store the data.

The alternative is to develop local, persistent schemas. Unfortunately 
interfaces have a bug that prevent persistent schemas, but Jim promised to 
fix that soon.

> There are two relatively minor problems I have with this system:
> In order to get the schemas, I currently have them all subclassing
> IProductAttributes, and I look up the Interfaces vocabulary and parse
> it for descendants of IProductAttributes. I would like a simpler way
> to get them. One idea I had was creating my own Type, and declaring
> them all to be of that type. Unfortunately, I don't know how to get a
> list of all interfaces of a given type.

import zope.component
zope.component.getUtilitiesFor(IMyTypeInterface)

> The second problem I have is that the built-in widget for a List of
> Choices only allows you to select a single instance of each option
> available to the Choice. Is this inherent to the Choice field itself,
> or is it merely a limitation of the widget?

Right, it is a limitation of the choice field, which is always a single item 
of a collection. Use the list or tuple field instead with a value_type that 
is a choice field.

Regards,
Stephan
-- 
Stephan Richter
CBU Physics & Chemistry (B.S.) / Tufts Physics (Ph.D. student)
Web2k - Web Software Design, Development and Training


More information about the Zope3-users mailing list