我正在尝试为我正在编写的特定类型编写内联编辑器。我的类型看起来像这样:
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
class Donor(models.Model):
# a donor _is_ a person
person = models.OneToOneField("Person")
目标是能够从Person
编辑Donor
中存储的信息,因为Person
更像是抽象类型(尽管不完全)。这是我的管理员:
class PersonInline(admin.StackedInline):
model = Person
fields = ('first_name', 'last_name')
class DonorAdmin(admin.ModelAdmin):
inlines = (PersonInline,)
admin.site.register(Donor, DonorAdmin)
不幸的是,当我在管理网站中创建新的Donor
时,我看到以下错误:
Exception at /core/donor/add/
<class 'core.models.Person'> has no ForeignKey to <class 'core.models.Donor'>
奇。为什么它不能用我非常简单的内联工作?
我发现如果我将引用的位置更改为Person
类而不是Donor
,它会起作用,但这确实会污染我的设计:
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
donor = models.OneToOneField("Donor", blank=True, null=True)
recipient = models.OneToOneField("Recipient", blank=True, null=True)
recipient_dependant = models.OneToOneField("RecipientDependant", blank=True, null=True)
class Donor(models.Model):
pass
class Recipient(models.Model):
pass
class RecipientDependant(models.Model):
pass
这似乎对我不利,因为Donor
是/拥有 Person
对象,但Person
不是/ {不拥有一个Donor
。另外,这有点疯狂。 Person
类根本不需要知道它拥有什么。
答案 0 :(得分:0)
您不能为Person设置内联,但让关系所有者(OneToOne字段所在的位置)成为捐赠者。
在您的情况下,您需要一个DonorInline和一个PersonAdmin。