从管理面板中删除m2m到字段

时间:2017-04-03 01:00:00

标签: python django

我搜索过,找不到办法做到这一点。这是我的情况:

我有3个班级:

  • 公开
  • AuthorOrder

最后一个是 through 类,它允许我指定发布的作者顺序,因为这通常不会发生。

最初,我为Author提供了blank=False必填字段(Publication),并添加了一个占位符Person对象,以便将Publication添加到该&## 39;有一个合适的作者。但是,更好的解决方案似乎是恰当地处理Views中的缺失作者。现在,我已经将字段更改为可选字段,但我似乎无法通过管理面板将作者设置为空。它给了我一个"这个字段是必需的。"错误。我的猜测是,这是因为Person类需要through,但在管理面板中将Person设置为null / empty不会将through对象设置为null / empty

我找到了解决方法。可以删除占位符Person对象。这会从Publication取消通过类而不通过级联删除它们,因为它们不再是强制性的。但是,这并不总是一个好的解决方法,所以我希望有更好的方法。

enter image description here

models.py

有很多代码,我只重现了必要的最小代码:

#Publication
class Publication(models.Model):
    authors = models.ManyToManyField(Person, blank=True, related_name="author_of", through='AuthorOrder')

#Person
class Person(models.Model):
    # mandatory
    firstname = models.CharField(max_length=200)

# AuthorOrder
class AuthorOrder(models.Model):
    publication = models.ForeignKey(Publication)
    author = models.ForeignKey(Person)

admin.py

# AuthorInline
class AuthorInline(admin.StackedInline):
    model = AuthorOrder
    extra = 3


# Publication
class PublicationAdmin(admin.ModelAdmin):
    list_display = ("title", 'issue', "keywords")
    search_fields = ['title', "keywords"]
    list_filter = ['issue']

    # author list via Inline
    inlines = [AuthorInline]


admin.site.register(Publication, PublicationAdmin)

1 个答案:

答案 0 :(得分:0)

很简单。在"作者订单的右边:AuthorOrder对象"行,有一个小"删除"框。检查并保存。它很小,有点奇怪,很容易错过。