【问题标题】:django cms plugin instance related_set returns empty listdjango cms 插件实例related_set 返回空列表
【发布时间】:2013-11-15 17:34:14
【问题描述】:

我有以下型号

class NewSlide(models.Model):
    slider = models.ForeignKey('NewSliderPlugin')
    title = models.CharField(max_length=255)
    content = models.TextField(max_length=80, null=True)
    link = models.CharField(max_length=255)
    image = models.ImageField(upload_to='slides', null=True)
    visible = models.BooleanField(default=False)

    def __unicode__(self):  # Python 3: def __str__(self):
        return self.title

class NewSliderPlugin(CMSPlugin):
    title = models.CharField(max_length=255)
    template = models.CharField(max_length=255, choices=(('slider.html','Top Level Slider'), ('slider2.html','Featured Slider')))

插件代码如下:

class NewSlideInline(admin.StackedInline):
    model = NewSlide
    extra = 1

class NewCMSSliderPlugin(CMSPluginBase):
    model = NewSliderPlugin
    name = "NewSlider"
    render_template = "slider.html"
    inlines = [NewSlideInline]
    def render(self, context, instance, placeholder):

        self.render_template = instance.template
        print instance.title
        print instance.newslide_set.all(), 1111111111111111
        context.update({
            'slider': instance,
            'object': instance,
            'placeholder': placeholder
        })
        return context

我在插件中添加了幻灯片并发布了更改,但是 1instance.newslide_set.all()1 返回空列表:[] 1111111111111111

更新: 它创建了 2 条记录,管理员以某种方式引用了 49,但渲染代码给出了 63

mysql> select * from cmsplugin_newsliderplugin;
+------------------+-----------+-------------+
| cmsplugin_ptr_id | title     | template    |
+------------------+-----------+-------------+
|               49 | slide     | slider.html |
|               63 | slide     | slider.html |
+------------------+-----------+-------------+

mysql> select * from slider_newslide;
+----+-----------+-------+---------+------+----------------+---------+
| id | slider_id | title | content | link | image          | visible |
+----+-----------+-------+---------+------+----------------+---------+
|  6 |        49 | ttttt | testt   | test | slides/287.jpg |       0 |
+----+-----------+-------+---------+------+----------------+---------+

顺便说一下,我安装了 django-reversion,不知道是不是因为这个应用。

【问题讨论】:

    标签: plugins django-cms


    【解决方案1】:

    根据documentation确定我需要复制相关项:

    class NewSliderPlugin(CMSPlugin):
        title = models.CharField(max_length=255)
        template = models.CharField(max_length=255, choices=(('slider.html','Top Level Slider'), ('slider2.html','Featured Slider')))
    
        def copy_relations(self, oldinstance):
            for slide in oldinstance.newslide_set.all():
                # instance.pk = None; instance.pk.save() is the slightly odd but
                # standard Django way of copying a saved model instance
                slide.pk = None
                slide.slider = self
                slide.save()
    

    【讨论】:

    • 如果使用 cms >= 2.4,您可以运行 ./manage.py cms check which 检查插件和其他内容上的 copy_relations 等内容,然后报告是否有任何错误或需要您注意的事情.
    猜你喜欢
    • 2014-05-12
    • 2017-09-14
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    相关资源
    最近更新 更多