关于Dexterity添加对象的两种流程

关于Dexterity添加对象的两种流程

一、通过 toolbar 添加菜单,添加内容对象
将调用plone.dexterity.browser包下的add.py模块
应当在下面方法中发送对象已创建事件,才能保证新生成的对象被恰当地包装在上下文环境中:

    def add(self, object):

        fti = getUtility(IDexterityFTI, name=self.portal_type)
        container = aq_inner(self.context)
        new_object = addContentToContainer(container, object)
#         import pdb
#         pdb.set_trace()
        notify(PreviewableFileCreatedEvent(new_object))

        if fti.immediate_view:
            self.immediate_view = "/".join(
                [container.absolute_url(), new_object.id, fti.immediate_view]
            )
        else:
            self.immediate_view = "/".join(
                [container.absolute_url(), new_object.id]
            )




二、通过mockup 的 upload组建添加内容对象
将调用plone.dexterity的utils.py下的addContentToContainer()和createContentInContainer()
应当在下面方法中发送对象已创建事件,才能保证新生成的对象被恰当地包装在上下文环境中:

def createContentInContainer(container, portal_type, checkConstraints=True,
                             **kw):
    content = createContent(portal_type, **kw)


    con = addContentToContainer(
        container,
        content,
        checkConstraints=checkConstraints
    )
    notify(PreviewableFileCreatedEvent(con))
    return con



设置