django cms插件实例related_set返回空列表 [英] django cms plugin instance related_set returns empty list

查看:92
本文介绍了django cms插件实例related_set返回空列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下型号

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

I have added slides to the plugin and published changes, however 1instance.newslide_set.all()1 returns empty list: [] 1111111111111111

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

Update: it creates 2 records, somehow the admin references 49, but render code gives 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,不确定是不是因为这个应用程序.

By the way, I have django-reversion installed, not sure if it's because of this app.

推荐答案

根据文档我需要复制相关项目:

OK according to the documentation I need to copy the related items:

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()

这篇关于django cms插件实例related_set返回空列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆