Я пытаюсь написать встроенный редактор для определенного типа, который я пишу. Мои типы выглядят так:
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'>
Одд. Почему это не работает с моей очень простой строкой?
EDIT
Я обнаружил, что это работает, если я изменю расположение ссылок на класс 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
не является / не владеет a Donor
. Плюс, это немного безумно. Класс Person
не обязательно должен знать, кому он вообще принадлежит.