【发布时间】:2017-12-03 06:25:26
【问题描述】:
考虑以下models.py,其中一个组包含多个人,每个人都有零个或多个电话号码。在这种特殊情况下,共享组的人员通常会共享至少一个电话号码,因此使用了多对多关系。
class Group(models.Model):
name = models.CharField(max_length=30)
class Person(models.Model):
group = models.ForeignKey(Group)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
class Phone(models.Model):
persons = models.ManyToManyField(Person)
number = models.CharField(max_length=30)
我想在 Django 管理中以单个视图显示这些模型,如下所示。
class PersonInline(admin.StackedInline):
model = Person
class PhoneInline(admin.StackedInline):
model = Phone # also tried: Phone.persons.through
@admin.register(Group)
class GroupAdmin(admin.ModelAdmin):
inlines = [PersonInline, PhoneInline]
但是,Group 和 Phone 之间没有外键,因此这会引发 SystemCheckError(以下之一):<class 'myapp.admin.PhoneInline'>: (admin.E202) 'myapp.Phone' has no ForeignKey to 'myapp.Group'.<class 'myapp.admin.PhoneInline'>: (admin.E202) 'myapp.Phone_persons' has no ForeignKey to 'myapp.Group'.
是否可以通过 Person 模型完成这项工作?内联电话的目标是显示组中所有人员的电话号码记录(奖励:添加新电话时,Person SelectMultiple 小部件只需要显示组中的其他人员)。我宁愿避免修改任何模板。如有必要,可以集成第三方应用程序。我可以使用 Django 1.10 或 1.11。
谢谢!
【问题讨论】:
标签: python django django-models django-forms django-admin