【问题标题】:Django cms - plugin manyToMany variable always emptyDjango cms - 插件 manyToMany 变量始终为空
【发布时间】:2017-03-12 17:26:45
【问题描述】:

我写了一个简单的插件来显示联系人,但我需要在某些页面上排除一些联系人。所以我在我的插件中添加了一个相关模型,它使用“structure_to_exclude”ManyToMany 关系。我的问题,当我得到这个变量时,它总是空的。

cms_plugins.py

class VMContactContactPlugin(CMSPluginBase):
    module = 'VM Contact Plugin'
    render_template = 'vm_contact/calendars/contacts_list.html'
    model = VMContactCalendarPluginModel
    name = _('VM Contact plugin')

    def render(self, context, instance, placeholder):
        print 'Instance : {0}'.format(instance)
        inst = instance.structure_to_exclude.all()
        print 'Instance.all() result : {0}'.format(inst)
        structures = Structure.objects.exclude(contact=None).exclude(pk__in=instance.structure_to_exclude.all().values_list('id',flat=True))
        context.update({
            'structures': structures,
        })
        return context

plugin_pool.register_plugin(VMContactContactPlugin)

相关模型

 class VMContactCalendarPluginModel(CMSPlugin):
     structure_to_exclude = models.ManyToManyField(
         Structure,
         verbose_name=_(u'Structures à exclure'),
     )

结构模型(多态!!)

class Structure(PolymorphicModel):
    contact = models.ForeignKey(Contact, blank=True, null=True)
    members = models.ManyToManyField(Contact, blank=True, null=True, related_name='%(class)s_members')
    title = models.CharField(max_length=50, default='Castor')
    description = models.CharField(max_length=254, blank=True)
    categories = CategoryManyToManyField('aldryn_categories.Category',
                                         verbose_name=_('categories'),
                                         blank=True)
    calendars = models.ManyToManyField(Calendar, blank=True)
    has_pages = models.BooleanField(default=True)
    avatar = FilerFileField(null=True, blank=True,
                                 on_delete=models.SET_NULL)
    classcss =  models.CharField(max_length=1, choices=CSS_CLASS, default='5')
    order = models.PositiveSmallIntegerField(default=0)
    class Meta:
        ordering = ['order']

打印结果:

实例:93

Instance.all() 结果:[]

有什么想法吗?我尝试使用 ID (93) 检索插件实例,以确保实例 var 没有问题,但它不会改变任何东西...... 问候,罗宾

【问题讨论】:

    标签: django django-models polymorphic-associations django-cms


    【解决方案1】:

    对于您创建的每个插件,一旦发布就会有两个版本。 公众版和草稿版。因此,更改 id 完全没问题。

    因为关系因项目而异,所以每当您的插件有关系时,您需要明确告诉 cms 在发布页面时如何“复制”这些关系。

    请调整您的插件模型以具有以下方法:

    def copy_relations(self, oldinstance):
        self.structure_to_exclude = oldinstance.structure_to_exclude.all()
    

    您可以在我们的docs 中阅读有关插件关系的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多