我搜索过,找不到办法做到这一点。这是我的情况:
我有3个班级:
最后一个是 through 类,它允许我指定发布的作者顺序,因为这通常不会发生。
最初,我为Author
提供了blank=False
必填字段(Publication
),并添加了一个占位符Person
对象,以便将Publication
添加到该&## 39;有一个合适的作者。但是,更好的解决方案似乎是恰当地处理Views
中的缺失作者。现在,我已经将字段更改为可选字段,但我似乎无法通过管理面板将作者设置为空。它给了我一个"这个字段是必需的。"错误。我的猜测是,这是因为Person
类需要through
,但在管理面板中将Person
设置为null / empty不会将through对象设置为null / empty
我找到了解决方法。可以删除占位符Person
对象。这会从Publication
取消通过类而不通过级联删除它们,因为它们不再是强制性的。但是,这并不总是一个好的解决方法,所以我希望有更好的方法。
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)
答案 0 :(得分:0)
很简单。在"作者订单的右边:AuthorOrder对象"行,有一个小"删除"框。检查并保存。它很小,有点奇怪,很容易错过。