在以编程方式创建灵活的内容时,我遇到了这个问题,比如使用invokeFactory,而不是通过表单。基本上,模式中每个字段的默认值都将是None,而不是空字符串、空列表等。如果我想遍历schema.List字段中的所有值,我必须首先检查它是否是一个列表,否则就会有出错的风险,这取决于内容是如何创建的。
我想知道我是否遗漏了一些方法来处理所有字段以设置初始值(如果它们尚未定义)。也许invokeFactory不是首选的方法?为创建的Dexterity内容设置初始值的事件侦听器是不是不好的做法?
发布于 2014-05-23 00:55:04
您缺少的是每个基于灵活性的内容类型在其模式字段的定义上都具有的default属性。
请参阅Dexterity开发人员手册中的Field properties。
发布于 2014-05-23 00:24:43
尝试使用createObject或createContent,然后将对象添加到容器中。
这些都在Dexterity手册的参考部分中的Manipulating content objects中进行了记录。它包含所有的导入和示例代码。
发布于 2016-11-18 01:34:52
经验告诉我总是初始化default和missing_value可选参数的模式,例如:
name = schema.TextLine(
title=u'Name',
default=u'',
missing_value=u'',
)
colors = schema.List(
title=_('Colors'),
value_type=schema.TextLine(),
default=[],
missing_value=[],
)原因是当您以编程方式创建对象(例如,使用plone.api.content.create)并且不初始化相关属性时,需要default,而当您不向z3c.form传递任何值时,则需要missing_value。
https://stackoverflow.com/questions/23810665
复制相似问题