2013-11-14 22 views
1

我有一個行爲,定義了兩個字段:yearweek(年)。從內容類型不變檢查的靈巧行爲訪問字段

此行爲被重用於多種內容類型,並且只有其中一個我需要確保此字段不會在任何其他相同內容類型的實例中重複,即此內容類型的兩個對象不能共享相同的yearweek(可以在同一周分享同一周的罰款)。

由於此限制僅適用於此特定內容類型,我嘗試使用zope.interface.invariant,但出於某種原因,我無法訪問行爲中定義的字段。

內容類型的簡化版本是:

class IMyContentType(form.Schema) 
    title = schema.TextLine(title="My title", 
          description="My description", 
          required=True, 
    ) 

    @invariant 
    def check_year_and_week(data): 
     data.week 

如何,我可以得到的值(如果有的話)從check_year_and_week不變之內?

回答

4

你不能。不變量可以訪問同一接口中其他字段的值,但不能訪問其他接口的字段。

您可以使用一個小插件管理器驗證,而不是:http://developer.plone.org/reference_manuals/active/schema-driven-forms/customising-form-behaviour/validation.html#widget-manager-validators

或做在窗體的行動處理程序驗證:http://developer.plone.org/reference_manuals/active/schema-driven-forms/customising-form-behaviour/validation.html#validating-in-action-handlers

0

行爲只不過是一個適配器;如果您沒有獲取不變量上的字段,則可能需要在嘗試訪問額外字段之前調整您的內容類型。

+0

你能提供一個例子嗎?我應該在哪裏做這種適應?該行爲被添加到其fti(.xml文件)上的內容類型,這是一個問題嗎? – gforcada

+0

一個有趣的問題。不變量的「數據」變量不會有任何適應。 – SteveM

+0

現在你有一個專家的真實答案:-) – hvelarde

相關問題