如何访问Django-CMS插件的父模型

rob*_*les 3 django django-models django-cms

我创建了2个django-cms插件,一个父"容器",可以包含多个子"内容"插件.

当我保存子插件时,我想访问父插件的模型.

from cms.plugin_pool import plugin_pool
from cms.plugin_base import CMSPluginBase

from .models import Container, Content

class ContainerPlugin(CMSPluginBase):
    model = Container
    name = "Foo Container"
    render_template = "my_package/container.html"
    allow_children = True
    child_classes = ["ContentPlugin"]

class ContentPlugin(CMSPluginBase):
    model = content
    name = "Bar Content"
    render_template = "my_package/content.html"
    require_parent = True
    parent_classes = ["ContainerPlugin"]
    allow_children = True

    def save_model(self, request, obj, form, change):
        response = super(ContentPlugin, self).save_model(
            request, obj, form, change
        )

        # here I want to access the parent's (container) model, but how?

        return response

plugin_pool.register_plugin(ContainerPlugin)
plugin_pool.register_plugin(ContentPlugin)
Run Code Online (Sandbox Code Playgroud)

obj是当前的插件实例,所以我可以获得该模型的所有属性,但我无法弄清楚如何访问父插件模型.有obj.parent,但据我所知,它不是插件实例.也试过玩self.cms_plugin_instance,obj.parent.get_plugin_instance()但没有成功.

有什么建议?

mis*_*bah 5

给定一个插件实例,instance.get_plugin_instance()方法返回一个包含以下内容的元组:

  1. instance - 插件实例
  2. plugin - 关联的插件类实例get_plugin_instance

所以像这样得到父对象:

instance, plugin_class = object.parent.get_plugin_instance()
Run Code Online (Sandbox Code Playgroud)