【问题标题】:How to get model from plugin?如何从插件中获取模型?
【发布时间】:2019-09-15 12:49:48
【问题描述】:

我的模特:

class Post(models.Model):
    title = models.CharField(max_length=100)
    short_description = models.CharField(max_length=100)
    image = models.ImageField(upload_to="uploads/images/")
    content = HTMLField(blank=True)
    slug = AutoSlugField(always_update=True,populate_from='title', unique=True) 
    date_created = models.DateField(default=datetime.date.today())

CMS 插件:

class PostPlugin(CMSPlugin):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)

注册插件:

@plugin_pool.register_plugin
class CMSPostPlugin(CMSPluginBase):
    model = PostPlugin
    name = _("Post")
    render_template = "post/post.html"
    allow_children = True
    admin_preview = True
    module = "subpage"

    def render(self, context, instance, placeholder):
        context.update({
            'post':instance.post,
            'instance':instance,
            'placeholder':placeholder
        })
        return context

所以,在那之后,我把它添加到我的数据库中,中间表就创建好了。这里是截图。 table screenshot

这是我获取插件实例的方式:

CMSPlugin.objects.filter(plugin_type='CMSPostPlugin', placeholder_id=placehoder.id)

随后,我想从这个中间表中获取Post 模型,但我不知道该怎么做。

当然,我可以像通过名称获取表然后获取帖子 ID 一样对其进行硬编码,但也许 Django CMS 有一个“正常”的解决方案?

【问题讨论】:

    标签: django python-3.x django-cms


    【解决方案1】:

    你应该可以做这样的事情:

    plugin_instance = (
        CMSPlugin.objects
            .filter(plugin_type='CMSPostPlugin', placeholder_id=placehoder.id)
            .first()
    )
    
    post_model_instance = PostModel.get(id=plugin_instance.id)
    
    post = post_model_instance.post
    

    看来CMSPlugin实例的ids和它的模型是一样的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 2013-12-14
      相关资源
      最近更新 更多