我正在尝试在创建Dexterity内容类型后执行一些任意代码。例如,内容类型可以代表马匹。
import logging
logger = logging.getLogger("Plone")
class IHorse(form.Schema):
def __init__(self, context):
logger.info('Creating horse')
super(self).init(self, context)
我希望在前台运行应用程序时在控制台中打印记录器消息“Creating horse”。但马是创造的,我没有得到它的消息。我想内容类型对象是由__init__
创建的,但也许我错了。
答案 0 :(得分:7)
您已连接到内容类型的架构的__init__
。模式用作填充内容的字段的基础,但它不是内容类型类本身。
如果要挂钩内容类型创建,请改为注册event subscribers:
from zope.app.container.interfaces import IObjectAddedEvent
@grok.subscribe(IHorse, IObjectAddedEvent)
def logHorseCreated(horse, event):
logger.info('Created a horse')
如果您确实 以__init__
方式自定义内容项初始化,则必须改为创建自己的custom content class。
from plone.dexterity.content import Item
class Horse(Item):
def __init__(self, id=None):
super(Horse, self).__init__(id)