2014-01-08 34 views
0

我试图创建一个报告内容类型,它包含时间间隔内自定义容器对象内容的时间点快照。我最终会在列表中存储附加的时间变量数据,以便在视图中及时生成列表并不会有效。创建内容时,我应该能够使用适配器来计算字段的内容吗?

我有,包括到引用列表保持到容器内容的时间间隔和现场报告的内容类型:

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()属性设置器来生成数据并将其分配给列表。我创建了一个“填充”类工厂覆盖问题的属性设置:

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

IIssueReport接口是否需要成为此行为的行为?我不这么认为。 – dayne

回答

1

您应该在适配器中提供provides定义。

试试吧!

<adapter for="yourType.IIssuesReport" 
     factory=".issuesReport.PopulateIssuesReport" 
     provides=".issuesReport.IPopulateIssuesReport" 
     />   
+0

有些东西仍然存在问题,因为这似乎没有奏效。我目前有相同的问题Report.py文件中的IIssuesReport,IPopulatedIssuesReport和PopulateIssuesReport。也许这是导致冲突阻止这个工作。我会尝试将适配器拆分为单独的文件。 – dayne

+0

creat behaviors.py并将其移入其中。让看看是否有效。适配器定义的因素和提供将开始像'.behaviors.PopulateIssuesReport'和'.behaviors.IPopulateIssuesReport' – WEBBYFOX

+0

将适配器代码(接口和工厂)移动到一个behavior.py文件,仍然看到相同的行为:当我创建IIssuesReport内容完成创建,但我期望适配器在调试器中运行并停止。其他想法我可能会错过?有没有一种方法可以看到适配器已注册并可用? – dayne