Могу ли я создать связанное поле Django между двумя моделями со значением общего внешнего ключа? - PullRequest
0 голосов
/ 29 марта 2019

У меня есть две модели:

class Foo(Model):

     special_id = IntegerField(primary_key=True)

class FooDetail(Model):

     special_id = IntegerField(primary_key=True)

special_id поступает из внешнего источника - это внешний ключ в другой базе данных.Да, Foo и FooDetail должны быть объединены в одну модель - но, если я не смогу - могу ли я создать связанное поле между двумя моделями, чтобы использовать его в запросах (как в valuesили select_related)?

Я мог бы добавить ForeignKey('FooDetail') в Foo, но я бы по существу сохранил special_id дважды.

1 Ответ

0 голосов
/ 29 марта 2019

Если вы хотите использовать функции ORM для связанных моделей, вы должны создать связь ( один к одному в данном случае) между двумя моделями.В одной из моделей вы можете (и должны) пропустить ссылку special_id.


Вы можете использовать внешний ключ в качестве первичного ключа в FooDetail, и если вы сохраните special_idв качестве первичного ключа в Foo вы будете сохранять тот же тип и количество столбцов и данных, что и в вашем примере (а именно один столбец в каждом, который содержит соответствующий special_id).

Однако вы получаете выгоду от отношений и принудительной честности.

Единственное отличие состоит в том, что когда вы вводите новый special_id, вы должны сначала создать Foo, чтобы иметь возможность указать на него в FooDetail - вряд ли это будет большая цена.


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

...