2014-01-08 30 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