Найти - Пользователи
Полная версия: можно ли из ZMI доступиться ко вложенным методам подчиненного класса.
Начало » Zope/Plone/Bluebream » можно ли из ZMI доступиться ко вложенным методам подчиненного класса.
1 2 3
regall
misha111
по id, прочитал. Он мне показал сложноватым, и ещё неизвестно какие подводные камни могут появится.
Нет, при таком подходе (связка по intid) никаких подводных камней не будет, успешно так связывал объекты 2 года и никаких проблем не возникало. Преимущество в том, что вы будете оперировать прозрачными объектами (без вложенностей).

P. S.
Проблемы возникают как раз-таки при вложенностях. У меня был горький опыт со следующим:
Оьъект, у которого было свойство gallery:
...
gallery = Tuple(value_type = ImageField) # Тут ImageField - кастомное поле, которое наследовалось от Bytes
..
При такой тройной вложенности в 10% случаев сохранения объекта возникал конфликт транзакций, потому что сохранение должно быть следующим:
1. В ZODB попадает каждый Image.
2. В ZODB попадает Tuple
3. В ZODB попадает объект.
Видимо, в некоторых случаях (наблюдалось там, где больше 5 картинок) возникал конфликт при изменении очередности этих шагов, поэтому от такой практики пришлось отказаться.

В таких случаях большие объекты вообще лучше делать контейнерами (наследуясьот zope.app.container.btree.BTreeContainer или от zope.app.container.ordered.OrderedContainer), делая ему следующую схему:
class IObjectSchema:
attr1 = Type1()
...
attrN = TypeN()

class IObjectContainer(IOrderedContainer):
containers('path.Interface11', 'path.Interface12', ...)
contains('path.Interface1', 'path.Interface2', ...)

class IObject(IObjectSchema, IObjectContainer):
pass
Потом в объекте Object необходимо настроить права на интерфейсы IObjectSchema, IObjectContainer
Таким образом, можно очень много всякого связывать с данным объектов, вкладывая в него другие объекты как в контейнер
astoon
Лишь подтвержу слова regall: надо использовать intid. При всяческих переиндексациях изменяется состояние лишь индексов. Идентификаторы же объектов привязываются к объектам жестко и не меняются. Так что подводных камней тут нет.
Работа с идентификаторами через индексы - достаточно общий паттерн в zope-разработке.
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