Один из способов решения этой проблемы (без изменения структуры модели) - установить для атрибута contact_ptr
экземпляра Journalist
соответствующий экземпляр Contact
. Например,
contact = Contact.objects.get(pk = 25624)
journalist = Journalist(contact_ptr = contact)
journalist.save()
Это становится легче понять, если вы сначала посмотрите на таблицу app_journalist
. Он имеет только один столбец, contact_ptr_id
. Поэтому, когда вы выполняете insert into app_journalist values (25624)
, вы устанавливаете contact_ptr_id = 25624
на уровне SQL. Соответственно, вы должны установить contact_ptr = <instance of Contact>
на уровне ORM.
Обновление
Существуют и другие способы решения проблемы, но они потребуют изменений в существующих моделях. Как @ bugspy.net указал , вы можете использовать общие отношения. Также вы можете объявить дополнительное поле type
, чтобы указать, является ли контакт журналистом, коллегой и т. Д.
Обновление 2
Также взгляните на этот демонстрационный фрагмент (и полный код ), который позволяет использовать полиморфное наследование (SQLAlchemy уже делает это).
Обновление 3
Как отметил сам @luc (см. Комментарий ниже)
journalist = Journalist(contact_ptr = contact)
одного будет недостаточно. Это перезапишет firstname
и lastname
из contact
в ""
. Чтобы избежать этого, вы должны явно назначить каждому полю Journalist
.