Django CMS - 自定义插件中的复制关系不起作用

时间:2018-04-17 12:47:41

标签: django-cms

发布页面后我遇到了copy_relations的问题。 我有一个附加模型的插件。这个模型有我的插件的ForeignKey。

class InfContactForm(CMSPlugin):
    name = models.CharField(max_length=50)

    def copy_relations(self, oldinstance):
        self.inf_contact_form.all().delete()
        for inf_contact_form in oldinstance.inf_contact_form.all():
            inf_contact_form.pk = None
            inf_contact_form.plugin = self
            inf_contact_form.save()

class InfContactFormAgreement(models.Model):
    inf_contact_form = models.ForeignKey(InfContactForm, related_name="inf_contact_form")
    agreement = HTMLField(blank=True, null=True)

" InfContactFormAgreement"然后使用模型作为内嵌堆叠在" InfContactForm"插件形式。

就像它是用docs编写的那样,还有copy_relations()方法,但是当页面发布时,没有任何反应。当我再次回到编辑模式时,InfContactFormAgreement每次都加倍。

这也是我的cms_plugins.py文件:

class PluginInfContactForm(CMSPluginBase):
    render_template = '_contact_form.html'
    name = name1
    model = InfContactForm
    require_parent = False
    inlines = [AgreementStackedInline, ]

    def render(self, context, instance, placeholder):
        context['instance'] = instance
        context = super(PluginInfContactForm, self).render(context, instance, placeholder)
        agreements = instance.inf_contact_form.all()
        context.update({
            'agreements': agreements,
        })
        return context

plugin_pool.register_plugin(PluginInfContactForm)

感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

代替:

inf_contact_form.plugin = self

您应该使用:

inf_contact_form.inf_contact_form = self

,结果代码应如下所示:

def copy_relations(self, oldinstance):
    self.inf_contact_form.all().delete()
    for inf_contact_form in oldinstance.inf_contact_form.all():
        inf_contact_form.pk = None
        inf_contact_form.inf_contact_form = self
        inf_contact_form.save()

致谢