Вывод заголовка созданных элементов в поле выбора другого элемента в Plone - PullRequest
1 голос
/ 18 июня 2020

У меня проблема с моим элементом Plone, которую я не могу решить. «Автомобиль» должен создавать список всех экземпляров «Цвет». Все экземпляры Color находятся в данном контейнере. Я не могу сделать это stati c, потому что хочу добавить больше экземпляров Color в будущем. Я попытался выбрать каждый элемент в своем контейнере и добавить его в свой словарный запас. Мне нужен только идентификатор / заголовок моего объекта, но я всегда получаю гигантскую трассировку ошибок. В конце я хочу выбрать цвет из заданных экземпляров при создании нового экземпляра «Автомобиль», похожего на раскрывающийся список. Я прочитал документы, но не могу найти решения, и это моя лучшая идея. Я тоже не программист python, и это мой первый проект на Plone. Я могу добавить полный список отказов позже, если он вам понадобится.

Я ценю любую помощь. Спасибо.

 ```colour= schema.Choice(
       title=u"Colour",
       description=u"Paintjob",
        vocabulary=givecolour(),
        required=False
    )

    @provider(IContextSourceBinder)
        def givecolour():
        colourlist = self.context.portal_catalog(path={"query" : "/madb-entw/it/colourcontainer", "depth" : 1})
        list = []
        i = 0

        for colour in colourlist:
            list.append(
                    SimpleVocabulary.createTerm(
                        colourlist.[i].getObject().id
                    )
            )
            i += 1

        return SimpleVocabulary(list)```

1 Ответ

1 голос
/ 19 июня 2020

Пожалуйста, всегда добавляйте свои следы, чтобы мы могли помочь вам лучше. Существует также официальный форум community.plone.org, где больше людей могут вам помочь.

Я рекомендую вам использовать plone.api для поиска ваших объектов, это немного проще и хорошо продумано.

примерно так:

from plone import api
color_brains = api.content.find(context=api.content.get(path='/madb-entw/it/colourcontainer'), depth=1, portal_type='Color')
# no need to do getOject() here, get the id/title directly from the catalog brain
colors = [(color.id, color.Title) for color in color_brains]

Одно примечание к вашему запросу:

colourlist = self.context.portal_catalog (path = { "query": "/ madb-entw / it / colourcontainer", "depth": 1})

Путь должен быть абсолютным, что означает, что он включает идентификатор сайта Plone, и он может быть другим. на другом сайте Plone. Таким образом, абсолютный путь здесь не очень хорошая идея, лучше возьмите объект портала и пройдитесь по своему относительному пути оттуда. Если madb-entw - это идентификатор вашего сайта Plone: ​​

portal.restrictedTraverse('it/colourcontainer')

или лучше, как указано выше, используйте plone.api.content.get (path = '/ it / colourcontainer'), что проще и проще.

...