2011-07-12 21 views
5

我們有一個敏捷內容類型要求從導航行爲中排除,但exclude_from_nav字段的默認值爲True。在行爲plone.app.dexterity.behaviors.exclfromnav.IExcludeFromNavigation它默認爲False你如何覆蓋Plone靈巧行爲中的一個字段的默認值?

很明顯,我可以創建自己的行爲,複製IExcludeFromNavigation除了默認值,但我想知道是否有辦法做到這一點基礎上重用IExcludeFromNavigation。我們有其他類型的內容使用IExcludeFromNavigation,我們希望它默認爲False

我們正在使用的Plone 4.1rc3和敏捷1.0

回答

3

我有這個工作使用plone.directives.form裝飾。

我已將此添加到我的某個行爲模塊中。

from plone.directives.form import default_value 

@default_value(field = IExcludeFromNavigation['exclude_from_nav']) 
def excludeFromNavDefaultValue(data): 
    return data.request.URL.endswith('++add++my_item_type') 

我也有在configure.zcml中以下

<include package="plone.directives.form" file="meta.zcml" /> 
<include package="plone.directives.form" /> 

<grok:grok package="." /> 

感謝Martin的大線索,儘管他的回答並沒有完全解決我的問題。這對我來說有點像黑客 - 一個更優雅的解決方案會很好。

+0

另一個選擇是註冊一個自定義添加表單,然後使用'表單'(或者它是'視圖'? )discriminator to default_value()來指定僅用於該表單的覆蓋。 – optilude

+0

謝謝,我用這個我的場景,我有兩個不同的對象類型在默認情況下我想排除在同一個容器中。問題是我不能把兩個對象定義相同的裝飾器,否則我會得到配置衝突的抱怨。我結束了剛剛聲明的類型之一:: return data.request.URL.endswith('++ add ++ my_item_type')或data.request.URL.endswith('++ add ++ my_other_type') –

+0

和就像你的例子,我不得不刪除上下文參數爲它工作...確實似乎hacky。 –

5

http://plone.org/products/dexterity/documentation/manual/developer-manual/advanced/defaultshttp://pypi.python.org/pypi/plone.directives.form#value-adapters,但基本上是:

@form.default_value(field=IExcludeFromNavigation['exclude_from_nav'], context=IMyType) 
def excludeFromNavDefaultValue(data): 
    return True 

乾杯, 馬丁

+0

Martin。謝謝你的回答,但這不是我所追求的。我可能是錯的,但是'context'似乎是你添加項目的容器,我需要一個基於添加項目類型的規則。我可以使用'data.request.URL'測試看到一個醜陋的黑客攻擊,但更優雅的事情會更好 – scarba05