Форум сайта python.su
Есть объект Object с атрибутами name и value.
Если записывать значения напрямую из объекта, к примеру
self.context.value = True
for i in self.context.values():
i.name = u'hello world'
for i in self.context.values():
i.name = u'hello world'
transaction.commit()
Офлайн
Попробуйте notify
from zope.event import notify
...
for i in self.context.values():
i.name = u'hello world'
notify(ObjectModifiedEvent(i))
Офлайн
А почему напрямую transaction.commit() не работает?
from zope.event import notify
from zope.lifecycleevent import ObjectModifiedEvent
for i in self.context.values():
i.name = u'hello world'
notify(ObjectModifiedEvent(i))
Отредактировано (Сен. 28, 2010 13:10:01)
Офлайн
проверил, ошибся.
self.context.value = True
Офлайн
Можно узнать, что такое self.context, и что такое self.context.values()?
Офлайн
нашёл проблему..
тупанул нипадецки
объект не персистентентный
Офлайн
LightOfMooNБыло предположение =)
ект не персистентентный
Офлайн
Еще бывают случаи когда мы изменяем у обьекта поле типа list.
Тогда еле написать (считае что type(value) - list ):
self.context.value.append(some_object)
self.context._p_changed = 1
Офлайн
кусок кода:
if self.context.__parent__ in prop.props.get(lastvalue, []):
prop.props[lastvalue].remove(self.context.__parent__)
if prop.props.has_key(self.context.value):
prop.props[self.context.value].append(self.context.__parent__)
else:
prop.props[self.context.value] = [self.context.__parent__]
prop._p_changed = 1
ObjectModifiedEvent(prop)
Офлайн
Если у вашего объекта есть атрибут-словарь или список, при внесении изменений внутри списка, система не поймет, что изменения произошли, так как ссылка на этот
атрибут осталась старая
from copy import copy
_props = copy(prop.props)
.... # Делаем все необходимое с _props
prop.props = _props
Офлайн