Если вы хотите использовать функции ORM для связанных моделей, вы должны создать связь ( один к одному в данном случае) между двумя моделями.В одной из моделей вы можете (и должны) пропустить ссылку special_id
.
Вы можете использовать внешний ключ в качестве первичного ключа в FooDetail
, и если вы сохраните special_id
в качестве первичного ключа в Foo
вы будете сохранять тот же тип и количество столбцов и данных, что и в вашем примере (а именно один столбец в каждом, который содержит соответствующий special_id
).
Однако вы получаете выгоду от отношений и принудительной честности.
Единственное отличие состоит в том, что когда вы вводите новый special_id
, вы должны сначала создать Foo
, чтобы иметь возможность указать на него в FooDetail
- вряд ли это будет большая цена.
Если вы получили предупреждение о том, что для поля ссылки в качестве Foo
указан первичный ключ, возможно, вы определили его как ForeignKey
.Вы должны определить это поле как OneToOneField
, поскольку вы имеете дело с отношением один к одному, как отмечено выше.Технически поле все еще является внешним ключом (= ссылка на первичный ключ строки в другой таблице), поэтому я использовал этот термин;но у него есть уникальное ограничение, позволяющее использовать его в качестве первичного ключа.