我有一个关系字段的tile,如下所示:
from z3c.relationfield.schema import RelationChoice
from z3c.relationfield.schema import RelationList
related_resources = RelationList(
title=_(u"Linked resources"),
required=False,
value_type=RelationChoice(
title=u"Multiple",
source=ObjPathSourceBinder(portal_type=('Folder', 'Collection'))
)
)
问题在于,当我添加磁贴时,一切似乎都有效,并且我得到一个像
这样的值'related_resources': [<Folder at /Plone/images>]
即使我希望在那里有一个RelationValue。
当我重新启动plone时,相同的磁贴会为该字段吐出该值:
'related_resources': [<Folder at images>]
一个带有破坏的采集链的对象,因此是一条破碎的路径。
对象是一样的(我可以通过目录和UID获取它的大脑),但它有点破碎。
重新启动后,编辑磁贴也无法正常工作:值从表单中消失,如果我更改了某些字段并且保存related_resources
则丢失。
我是否需要为此类字段定制z3c.form数据管理器?如果是这样,我应该实施吗?
感谢您的任何指示。
答案 0 :(得分:1)
首先,你不应该看到
'related_resources': [<Folder at /Plone/images>]
但
'related_resources': [<RelationValue...>]
RelationListDictDataManage最初在plone.app.relationfield中实现,仅用于支持切片。它确实有效,但似乎至少我们后来放弃了它们,转而使用UUID进行关系......
然而,显然某些事情已经破裂,而是使用了默认的属性字段数据管理器。您可以将调试器添加到z3c.form.form.applyChanges
中以弄清楚,为什么它没有选择正确的数据管理器。