Форум сайта python.su
Есть класс А с интерфейсом:
class ClassA(zope.interface.Interface):
name = TextLine(title=u“Name”, required=True)
value = TextLine(title=u“Value”, required=False)
1). Поле select:
Есть класс B интерфейс которого должен иметь
атрибут - выпадающий список с именами (атрибут name) существующих
объектов класса А.
Как это можно осуществить? Пожалуйста помогите!!!
Офлайн
Обычно лучше проиндексировать твои объекты, предоставляющие интерфейс IClassA. Тогда в схеме второго интерфейса используем словарь собранный на основе индексов.
Если выбирать нужно только один объект из списка, тогда
interfaces.py ::
class IFoo(Interface):
selected = Choice(
title = u'Choice object',
required = False,
vocabulary = 'foo.vocabulary')
from zope.component import getUtility
from zope.schema.vocabulary import SimpleTerm, SimpleVocabulary
from zope.security.proxy import removeSecurityProxy
from zope.app.intid.interfaces import IIntIds
from zope.app.catalog.interfaces import ICatalog
def fooVocabulary(context):
catalog = getUtility(ICatalog)
intids = getUtility(IIntIds)
result = catalog.apply({'class_a_index':{'any':None}},)
class_a_objects = [(id, removeSecurityProxy(intids.getObject(id)).name) for id in result]
terms = [SimpleTerm(value=id, token=id, title=name) for (id, name) in class_a_objects]
return SimpleVocabulary(terms)
<utility
provides="zope.schema.interfaces.IVocabularyFactory"
component=".vocabulary.fooVocabulary"
name="foo.vocabulary"
/>
Отредактировано (Июнь 7, 2008 22:30:28)
Офлайн
Спасибо огромное! сегодня попробую все сделать!!!
Офлайн
Опять проблема! Через ZMI проиндексировать не могу, когда делаю индекс “страницу невозможно отобразить”. А как проиндексировать в коде понятия не имею! Помогите чем сможете!!!
Офлайн
Не понял.
Что именно в ZMI делаешь ? Индексируется все автоматически при добавлении объектов.
В коде при добавлении обхекта:
from zope.lifecycleevent import ObjectCreatedEvent
from zope.event import notify
some_object = ... ... ...
notify(ObjectCreatedEvent(some_object))
some_container[id] = some_object
Офлайн
Нужно проиндексировать объекты, предоставляющие интерфейс IClassA. (см. выше) В ZMI сделать нечего не получается. В закладке «Управление сайтом» добавляю генератор уникальных идентификаторов, каталог (имя по умолчанию), в каталоге добавляю индекс по полям, ссылаюсь на интерфейс нужного класса и в результате «Невозожно отобразить страницу»! Как сделать все правильно??? И как сделать это в коде???
Офлайн
lissaМожет ты не зарегистрировал утилиту IIntIds и каталог, а только добавил их в контейнер ? …
Нужно проиндексировать объекты, предоставляющие интерфейс IClassA. (см. выше) В ZMI сделать нечего не получается. В закладке «Управление сайтом» добавляю генератор уникальных идентификаторов, каталог (имя по умолчанию), в каталоге добавляю индекс по полям, ссылаюсь на интерфейс нужного класса и в результате «Невозожно отобразить страницу»! Как сделать все правильно??? И как сделать это в коде???
Офлайн