首页 > 解决方案 > 使用 ManyToManyField 时字段重复

问题描述

我从 Django 1.10 升级到 1.11,现在我以前工作的两个模型导致错误。它们是仅有的两个具有ManyToManyField包含related_name属性的模型。我有另一个ManyToManyField没有 a related_name,它工作正常。

引发的错误具有误导性:

<class 'hadotcom.admin.CaseStudyAdmin'>: (admin.E012) There are duplicate field(s) in 'fieldsets[0][1]'

我发现了其他引用该错误的 SO 帖子,并确认它们都不符合我的问题。

如果我注释掉整行,它就会通过检查。我尝试添加一个through属性,但没有帮助。

示例代码(使用夹层):

class CaseStudyPage(Page):
  industries = models.ManyToManyField("IndustryPage", blank=True, related_name="industry_set", through="CaseStudyIndustries")

class CaseStudyAdmin(HaPageAdmin):
  inlines = (Foo, Bar,)

很高兴填写任何空白,并提前感谢。

标签: pythondjangomezzanine

解决方案


似乎在子类ContentTypedAdminMezzanine添加了ManyToMany两次字段。我还没有调查到底为什么会发生。一个可能的解决方案是将最后两行更改ContentTypedAdmin.__init__()为:

if not hasattr(field, "translated_field") and field.name not in self.fieldsets[0][1]["fields"]:
    self.fieldsets[0][1]["fields"].insert(3, field.name)

推荐阅读