【问题标题】:Moving fields between fieldsets on Dexterity在 Dexterity 上的字段集之间移动字段
【发布时间】:2012-02-12 15:37:38
【问题描述】:

在 Archetypes 中,为了将一个字段从一个字段集(或模式)移动到另一个,我们可以执行以下操作:

schema['creators'].schemata = 'default'

但是,我使用 Dexterity 并没有达到同样的效果。我试过使用表单提示。例如:

form.fieldset('default',
    fields=['creators']
 )

我注意到它不起作用,因为此时“创作者”字段是未知的。 (所有权行为尚未评估)。

尽管如此,通过表单提示,我可以从“默认”转移到另一个(例如“所有权”)。

myfile = NamedFile(title=_(u"A file"))
form.fieldset('ownership', fields=['myfile'])

我该怎么做?写下我自己的行为?

谢谢!

【问题讨论】:

  • 也许您可以通过覆盖 Form.updateWidgets() 来操作 Z3C Form.widgets 实例?

标签: plone archetypes dexterity


【解决方案1】:

您可能需要在您控制的界面上定义要分配的字段。虽然这似乎是重复的,但出于完整和明确的目的,这是一个好主意。您可以:

(1) 在您的内容类型界面上声明“创作者”字段(可能是推荐的解决方案),或者...

(2) 使用此处记录的您自己的行为(并将此行为添加到 portal_types 和相关设置 XML 中类型的 FTI):http://docs.plone.org/external/plone.app.dexterity/docs/behaviors/creating-and-registering-behaviors.html

第一个解决方案应该是最简单的。无论如何,您希望控制字段集位置或顺序的任何字段都应该由您的接口定义。

【讨论】:

  • 按照(1),我必须在架构接口处执行creators = schema.Text() 之类的操作,对吗?我这样做了,但是来自IOwnershipcreators 并没有与我声明的那个重叠。你有例子吗?
  • 是的,在您的界面上创建一个“创建者”模式字段,并将 IOwnership 界面子类化,而不是作为一种行为混入 FTI。行为很可能被组合到编辑表单的 plone.autoform 组中,而不考虑您的选择。如果您绝对必须使用某种行为,请选择上面的路线 #2。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-16
相关资源
最近更新 更多