Найти - Пользователи
Полная версия: BB ForbiddenAttribute
Начало » Zope/Plone/Bluebream » BB ForbiddenAttribute
1 2
LightOfMooN
Похоже, эта ошибка именно из-за того, что в список добавляется объект, к которому применён removeSecurityProxy
Sleepwalker
Ну как прописать пермишн для листа я не заню (возможно и нельзя). А вот для чего создавать словарь списков с идентификаторами обьектов никак не пойму … Для этих целей есть же zope.app.intid (хотя кажись в bluebream это zope.intid). Она автоматически создаст индекс для всех обьектов которые вы будете создавать и для ускорения поиска ее и спользуют (в связке с zope.catalog)
LightOfMooN
В словаре лежат ключи промежуточных запросов и идентификаторы объектов. Идентификаторы объектов в свою очередь будут генерироваться через intid.
Пример структуры:
объект-свойство “размер”:
{'200см':, '500см:'}
Таким образом, если нам надо выпонить поиск по атрибуту “размер” равному “200”, мы напрямую запрашиваем данные по ключу и получаем список инентификаторов объекта, на основе которых и получим сами объекты.
LightOfMooN
Кстати, почему-то не обратил внимания, но при добавлении объекта Thing он также добавляется в список prop.props, и всё работает идеально:
Вот код:
    def createProp(self, object): // object - объект Thing
tbool = TBool()
namechooser = INameChooser(object)
number = namechooser.chooseName('atr', tbool)
tbool.name = self.name
tbool.description = self.description
tbool.value = False
object[number] = tbool
if self.props.has_key(tbool.value):
self.props[tbool.value].append(object) // self - объект TBoolInfo
else: self.props[tbool.value]=[object]
и никакие removeSecurityProxy не нужны.

Почему так?
Sleepwalker
Есть предположение что в этом случае вы обращаетесь к props из самого класса (self.props) и соответственно он не обернут в security proxy. Хотя никогда не исследовал такого. Интересно будет проверить.
Sleepwalker
LightOfMooN
В словаре лежат ключи промежуточных запросов и идентификаторы объектов. Идентификаторы объектов в свою очередь будут генерироваться через intid.
Пример структуры:
объект-свойство “размер”:
{'200см':, '500см:'}
Таким образом, если нам надо выпонить поиск по атрибуту “размер” равному “200”, мы напрямую запрашиваем данные по ключу и получаем список инентификаторов объекта, на основе которых и получим сами объекты.
Так для этого и созданны поисковыие индексы каталога. Они индексируют нужные вам аттрибуты и потом вы по ним выполняете поиск.
LightOfMooN
Но они индексируют глобально, а мне надо локально для каждого раздела, причём названия атрибутов могут совпадать, а типы атрибутов различаться.
regall
LightOfMooN
Но они индексируют глобально, а мне надо локально для каждого раздела, причём названия атрибутов могут совпадать, а типы атрибутов различаться.
Они индексируют так, как вы напишете.
LightOfMooN
В конечном итоге проблему решил добавлением небольших методов в класс:
    def addThing(self, val, obj):
obj = removeSecurityProxy(obj)
self.props=self.props.copy()
self.props[val].append(obj)

def delThing(self, val, obj):
obj = removeSecurityProxy(obj)
self.props=self.props.copy()
self.props[val].remove(obj)
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