如何在Plone中覆盖灵巧行为中字段的默认值?

如何在Plone中覆盖灵巧行为中字段的默认值?,plone,behavior,dexterity,Plone,Behavior,Dexterity,我们要求灵巧内容类型从导航行为中排除,但exclude\u from\u nav字段的默认值为True。在behaviorplone.app.dextrity.behaviors.exclefromnav.IExcludeFromNavigation中,它默认为False 显然,我可以创建自己的行为来复制IExcludeFromNavigation,除了默认值,但我想知道是否有一种方法可以基于重用IExcludeFromNavigation来实现这一点。我们还有其他使用IExcludeFromN

我们要求灵巧内容类型从导航行为中排除,但
exclude\u from\u nav
字段的默认值为
True
。在behavior
plone.app.dextrity.behaviors.exclefromnav.IExcludeFromNavigation
中,它默认为
False

显然,我可以创建自己的行为来复制
IExcludeFromNavigation
,除了默认值,但我想知道是否有一种方法可以基于重用
IExcludeFromNavigation
来实现这一点。我们还有其他使用
IExcludeFromNavigation
的内容类型,我们确实希望它默认为
False

我们使用的是Plone 4.1rc3和Dextrity 1.0,请参见和,但基本上:

@form.default_值(field=IExcludeFromNavigation['exclude_from_nav'],context=IMyType)
def excludeFromNavDefaultValue(数据):
返回真值
干杯,
Martin

我使用
plone.directives.form
decorator完成了这项工作

我已将此添加到我的一个行为模块中

从plone.directions.form导入默认值
@默认值(字段=IEExcludeFromNavigation['ExcludeFromuNav']
def excludeFromNavDefaultValue(数据):
返回data.request.URL.endswith(“++add++my\u item\u type”)
我在configure.zcml中也有以下内容



感谢马丁提供了大量线索,尽管他的回答并没有完全解决我的问题。对我来说,这感觉有点像黑客——一个更优雅的解决方案会更好。

Martin。谢谢你的回答,但这不是我想要的。我可能错了,但是
context
这里似乎是您要添加项目的容器,我需要一个基于所添加项目类型的规则。我可以通过测试
data.request.URL
看到一个丑陋的黑客行为,但更优雅的方法是另一个选择是注册一个自定义的add表单,然后使用'form'(或者是'view'?)鉴别器默认值()来指定该表单的覆盖。谢谢,我在我的场景中使用了这个方法,在同一个容器中有两种不同的对象类型,我希望在默认情况下排除它们。问题是我不能在两个对象定义上使用相同的修饰符,否则我会收到配置冲突投诉。我最后只是在其中一个类型上声明::return data.request.URL.endswith('++add++my_item_type')或data.request.URL.endswith('++add++my_other_type'),就像你的例子一样,我必须删除上下文参数,它才能工作。。。看起来确实有点黑。