【问题标题】:Dexterity - initialize schema values敏捷 - 初始化模式值
【发布时间】:2016-11-18 01:34:52
【问题描述】:

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

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

【问题讨论】:

    标签: plone dexterity


    【解决方案1】:

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

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

    【讨论】:

    • 这正是我所需要的,谢谢!老实说,我只使用过 @form.default_value 装饰器,甚至忘记了这个属性。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      经验告诉我要始终初始化我的架构并提交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 传递任何值时需要。表格。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-28
        • 1970-01-01
        • 1970-01-01
        • 2014-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多