我正在尝试创建一个报表内容类型,其中包含一段时间内自定义容器对象内容的时间点快照。我最终会在列表中存储额外的时间变量数据,因此在视图中即时生成列表将不会很有效。
我有一个报告的内容类型,其中包含时间间隔和一个用于保存容器内容引用列表的字段:
class IIssuesReport(form.Schema):
report_begin_date = schema.Date(
title=_(u"Report begin date"),
)
report_end_date = schema.Date(
title=_(u"Report end date"),
)
issues = RelationList(
title=_(u"Report Issues"),
description=_(u'Select Issues'),
default = [],
value_type=RelationChoice(
title=_(u'Issue'),
default=[],
source=ObjPathSourceBinder()
),
required=False,
)
我希望在提交表单时以编程方式填充“问题”字段。我相信我应该能够通过编写一个覆盖issues()属性setter的适配器来生成并将数据分配给列表。我创建了一个“填充”类,其中包含一个工厂来覆盖问题属性设置器:
class IPopulatedIssuesReport(interface.Interface):
"""A list of issues.
"""
class PopulateIssuesReport(object):
""" Generate the IssuesReport issues from existing inventory
"""
implements(IPopulatedIssuesReport)
adapts(IIssuesReport)
def __init__(self, context):
self.context = context
@property
def issues(self):
import pdb; pdb.set_trace()
并注册了适配器工厂:
<adapter factory=".issuesReport.PopulateIssuesReport" />
我在其他关于调整INameFromTitle以使用其他单独字段的帖子之后构建了大部分内容,特别是DavidJB's post:
当我创建我的IIssueReport内容时,我希望将其放入适配器中的调试器中,但它不会发生,就像适配器永远不会被执行一样。我错过了什么?这是使用我网站的现有数据填充此字段的正确方法吗?
答案 0 :(得分:1)
您应该在适配器中提供provides
定义。
试试这个!!
<adapter for="yourType.IIssuesReport"
factory=".issuesReport.PopulateIssuesReport"
provides=".issuesReport.IPopulateIssuesReport"
/>