如何在portal_factory 中创建并填充Plone 对象?

Aus*_*pex 4 plone

我需要从第二个对象的视图object2创建一个(原型)对象( - 它不是新对象的父对象)。它需要预先填充来自Request和 的数据object2

简单的解决方案似乎是在架构字段上使用“default_method”,这可以用于请求中的数据,但我不相信我可以从那里访问视图,因此object2也不能访问。无论如何,其中一个字段是 ReferenceField ,object2并且我读到 ReferenceField 忽略“default_method”。

另一个选项是在portal_factory 中创建它,设置其默认值,然后显示“添加”页面,允许用户根据需要修改内容,或者退出而不实际创建对象。完美,除了,在可用于创建对象的多种方法中,(invokeFactory()据我所知),实际上只将对象留在portal_factory中 - 并且因为它只返回一个字符串(对象的Add的URL) page),不接受关键字参数,并且似乎不通知任何事件(当然不是 IObjectCreatedEvent),在将用户引导到编辑页面之前,我不知道如何使用我的数据修改它。_createObjectByType()_constructInstance()createObject()createObject

Tib*_*him 5

这是我在无法使用 createObject 时推荐的模式:

_id = self.context.generateUniqueId("Document")
_id = self.context.invokeFactory(type_name=type_name, id=_id)
ob = self.context[_id]
ob.edit(
    description = "text...",
    subject     = ('tag1', 'tag2'),
    title       = "some title...",
)
ob._renameAfterCreation(check_auto_id=True)
_id = ob.getId()
Run Code Online (Sandbox Code Playgroud)