如何在创建内容类型后执行操作?

时间:2013-02-26 20:50:27

标签: plone dexterity

我正在尝试在创建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__创建的,但也许我错了。

1 个答案:

答案 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)