在plone中的另一个项目的选择字段中列出已创建项目的标题
Listing the title of created items in a choice field of another item in plone
我无法解决我的 Plone 项目问题。 'Car' 应该创建 'Colour' 所有实例的列表。
所有 'Colour' 个实例都在给定的容器中。我不能将其设为静态,因为我想在将来添加更多 'Colour' 个实例。
我尝试选择容器中的每个项目并将其添加到我的词汇表中。我只需要 object 的 id/title,但我总是以大量的失败堆栈跟踪告终。
最后,我想在创建类似于下拉列表的新 'Car' 实例时从给定实例中选择一种颜色。
我已阅读文档但找不到解决方案,这是我最好的主意。
我也不是 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)```
请随时添加您的踪迹,以便我们更好地帮助您。
还有官方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 站点 ID,并且在另一个 Plone 站点中可以不同。
所以绝对路径在这里不是一个好主意,最好获取门户对象并从那里遍历你的相对路径。
如果 madb-entw 是你的 Plone 站点 id:
portal.restrictedTraverse('it/colourcontainer')
或如上更好,使用 plone.api.content.get(path='/it/colourcontainer')
哪个更干净,更容易。
我无法解决我的 Plone 项目问题。 'Car' 应该创建 'Colour' 所有实例的列表。 所有 'Colour' 个实例都在给定的容器中。我不能将其设为静态,因为我想在将来添加更多 'Colour' 个实例。 我尝试选择容器中的每个项目并将其添加到我的词汇表中。我只需要 object 的 id/title,但我总是以大量的失败堆栈跟踪告终。 最后,我想在创建类似于下拉列表的新 'Car' 实例时从给定实例中选择一种颜色。 我已阅读文档但找不到解决方案,这是我最好的主意。 我也不是 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)```
请随时添加您的踪迹,以便我们更好地帮助您。 还有官方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 站点 ID,并且在另一个 Plone 站点中可以不同。 所以绝对路径在这里不是一个好主意,最好获取门户对象并从那里遍历你的相对路径。 如果 madb-entw 是你的 Plone 站点 id:
portal.restrictedTraverse('it/colourcontainer')
或如上更好,使用 plone.api.content.get(path='/it/colourcontainer') 哪个更干净,更容易。