Найти - Пользователи
Полная версия: BB редактирование объекта
Начало » Zope/Plone/Bluebream » BB редактирование объекта
1 2
LightOfMooN
Есть объект 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()
В чём проблема?
regall
Попробуйте notify
from zope.event import notify
...
for i in self.context.values():
i.name = u'hello world'
notify(ObjectModifiedEvent(i))
LightOfMooN
А почему напрямую 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))
так тоже не работает =(
после перезагрузки возвращаются предыдущие значения
LightOfMooN
проверил, ошибся.
self.context.value = True
так значения тоже не сохраняются
regall
Можно узнать, что такое self.context, и что такое self.context.values()?
LightOfMooN
нашёл проблему..
тупанул нипадецки
объект не персистентентный
regall
LightOfMooN
ект не персистентентный
Было предположение =)
Sleepwalker
Еще бывают случаи когда мы изменяем у обьекта поле типа list.

Тогда еле написать (считае что type(value) - list ):
  self.context.value.append(some_object)
не сработает (теоретически :) ).

Следует в таких случаях явно говорить что обьект изменен:
self.context._p_changed = 1
Ну это в том случае есле вы работаете с ZODB.
LightOfMooN
кусок кода:
                    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)
Не смотря на “prop._p_changed = 1” и “ObjectModifiedEvent(prop)” всеравно не сохраняет =(

Объект персистентный (class TBool_Info(Persistent))
regall
Если у вашего объекта есть атрибут-словарь или список, при внесении изменений внутри списка, система не поймет, что изменения произошли, так как ссылка на этот
атрибут осталась старая
from copy import copy
_props = copy(prop.props)
.... # Делаем все необходимое с _props
prop.props = _props
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB