您想要做的是影响名称选择器,您可以使用界面的自定义行为来做到这一点。
子类化INameForTitle
接口是最简单的:
from plone.app.content.interfaces import INameFromTitle
from zope import interface, component
from ..types.interfaces import IArticle
class INameFromCode(INameFromTitle):
pass
class ArticleCodeAsTitle(object):
component.adapts(IArticle)
interface.implements(INameFromCode)
def __init__(self, context):
self.context = context
@property
def title(self):
return self.context.code
默认名称选择器尝试使新添加的对象适应INameForTitle
接口,然后如果成功,将使用该.title
属性为对象构建新名称。通过实现该接口的子类作为IArticle
对象的适配器,您可以将标题替换为.code
字段,从而确保将其用于新名称。
将此注册为:
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:plone="http://namespaces.plone.org/plone"
i18n_domain="your.i18n.domain"
>
<plone:behavior
title="ArticleCode"
description="Use .code as the title when choosing a new object name"
provides=".articlecode.INameFromCode"
factory=".articlecode.ArticleCodeAsTitle"
for="..types.interfaces.IArticle"
/>
</configure>
并将此行为添加到您的Article
类型定义而不是行为INameFromTitle
中。