如何在Dexterity中传递datagrid字段中的选项字段的列表值?

2024-05-23 19:08:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我的Dexterity内容类型中有datagridfield,使用collective.z3cform。我有一个接口类,它将值_类型定义为内容类型中主datagridfield的DictRow。在

class IAssessment(interface):
    assessment_item=schema.Choice(
        title=u"Assessment Item",
        values=[u"Item 1",u"Item 2"],
        required=False
    )
    reference=schema.TextLine(title=u"Reference",required=False)


class Application(form.Schema,IImageScaleTraversable):
    form.widget(app_assessment=DataGridFieldFactory)
    app_assessment=schema.List(
        title=u"Application Assessment",
        value_type=DictRow(title=u"Application Assessment",schema=IAssessment)
    )

是否可以使用来自其他内容类型的portal_catalog根据目录查询为assessment_item字段下的IAssessment提供值。当我插入catalog=getToolByName(context,'portal_catalog')时出现错误,因为上下文没有定义,即使我在IAssessment中放了一个参数上下文,我还是得到了相同的错误。有没有一种方法可以在接口类中执行目录查询,如果没有,还有其他方法吗?在


Tags: 类型内容applicationtitleschemaitemclasscatalog
1条回答
网友
1楼 · 发布于 2024-05-23 19:08:18

您很可能需要一个上下文源绑定器,它是dynamic vocabulary的形式。在

from zope.schema.interfaces import IContextSourceBinder
from zope.schema.vocabulary import SimpleVocabulary
from Products.CMFCore.utils import getToolByName

@grok.provider(IContextSourceBinder)
def assessmentItems(context):
    catalog = getToolByName(context, 'portal_catalog')
    return SimpleVocabulary.fromItems(
        (result.getId(), result.getObject()) for result in catalog(...)
    )

在字段定义中,然后将其作为vocabulary传入:

^{pr2}$

相关问题 更多 >