敏捷 - 初始化架构值

时间:2014-05-22 15:08:45

标签: plone dexterity

我在以编程方式创建Dexterity内容时遇到了这个问题,例如使用invokeFactory,而不是通过表单。基本上,模式中每个字段的默认值将是None而不是空字符串,空列表等。如果我想循环遍历schema.List字段中的所有值,我最终必须检查它是否是首先列出或冒险获取错误,具体取决于内容的创建方式。

我想知道是否可能缺少一些方法来处理所有字段以设置初始值(如果它们尚未定义)。也许invokeFactory不是首选方法?为创建的Dexterity内容设置初始值的事件监听器是不是很糟糕?

3 个答案:

答案 0 :(得分:2)

您缺少的是每个基于敏捷的内容类型对其架构字段定义的default属性。

请参阅Dexterity开发人员手册上的Field properties

答案 1 :(得分:1)

尝试createObject或createContent,然后将对象添加到容器中。

这些都记录在敏捷手册参考部分的Manipulating content objects中。它包含所有导入和示例代码。

答案 2 :(得分:1)

经验教会我总是初始化我的模式,提交defaultmissing_value个可选参数,例如:

name = schema.TextLine(
    title=u'Name',
    default=u'',
    missing_value=u'',
)
colors = schema.List(
    title=_('Colors'),
    value_type=schema.TextLine(),
    default=[],
    missing_value=[],
)

原因是当您以编程方式创建对象时需要default(例如使用plone.api.content.create)并且不初始化相关属性,而当您未通过时需要missing_value z3c.form的任何值。