Форум сайта python.su
prop = removeSecurityProxy(prop)
_props = copy(prop.props)
print lastvalue
if self.context.__parent__ in _props.get(lastvalue, []):
_props[lastvalue].remove(self.context.__parent__)
if _props.has_key(self.context.value):
_props[self.context.value].append(self.context.__parent__)
else:
_props[self.context.value] = [self.context.__parent__]
prop.props = _props
prop._p_changed = 1
ObjectModifiedEvent(prop)
Офлайн
1. Когда пишете “prop.props = _props”, то уже “prop._p_changed = 1” не нужно, т.к. идет явный сетатр.
2. Не понятно что вы делаете этой строчкий кода:
ObjectModifiedEvent(prop)
from zope.event import notify
notify(ObjectModifiedEvent(prop))
Офлайн
класс Thing
интерфейс:
class IThing(IContainer):
name = TextLine(
title=u"name",
default=u"",
required=True)
cost = Float(
title=u"cost",
default=0.0,
required=True)
class Thing(BTreeContainer):
implements(IThing)
name=u""
cost=0
<interface
interface=".interfaces.IThing"
type="zope.app.content.interfaces.IContentType"/>
<class class=".thing.Thing">
<require
interface=".interfaces.IThing"
permission="zope.Public"
/>
<require
set_schema=".interfaces.IThing"
permission="zope.Public"
/>
</class>
Офлайн
else:
prop.props[self.context.value] = ['123']
Отредактировано (Сен. 30, 2010 14:48:29)
Офлайн
IThing наследуется от IContainer. Разделите их. Сделайте IThing(IThingSchema, IContainer), где IThingSchema - то, что у вас сейчас.
Потом для класса Thing установите права на IReadContainer, и IWriteContainer, которые нужны для считывания и записи в контейнер.
Офлайн
Проблема с сохранением решилась следующей конструкцией:
prop.props=prop.props.copy()
Отредактировано (Сен. 30, 2010 20:35:33)
Офлайн