从内容类型固定检查的灵活性行为访问字段



我有一个定义两个字段的行为:yearweek(年份)。

行为被重用于多种内容类型,并且仅在其中一种中,我需要确保此字段不会在同一内容类型的任何其他实例中重复,即此内容类型的两个对象不能共享相同的yearweek(可以共享同一年同一周)。

由于此限制仅适用于此特定内容类型,因此我尝试使用zope.interface.invariant但由于某种原因,我无法访问行为中定义的字段。

内容类型的简化版本为:

class IMyContentType(form.Schema)
    title = schema.TextLine(title="My title",
                            description="My description",
                            required=True,
    )
    @invariant
    def check_year_and_week(data):
        data.week

如何从不变量中获取值(如果有check_year_and_week

你不能。不变量可以访问同一接口中其他字段的值,但不能访问其他接口中的字段。

您可以改用小部件管理器验证器:http://developer.plone.org/reference_manuals/active/schema-driven-forms/customising-form-behaviour/validation.html#widget-manager-validators

或者在表单的操作处理程序中进行验证:http://developer.plone.org/reference_manuals/active/schema-driven-forms/customising-form-behaviour/validation.html#validating-in-action-handlers

行为只不过是一个适配器;如果您没有获取不变的字段,则可能需要在尝试访问额外字段之前调整内容类型。

最新更新