Эффективный способ создать 2 объекта Django, которые ссылаются друг на друга с помощью ForeignKey? - PullRequest
0 голосов
/ 29 июля 2011

Это кажется простым вопросом, но я чувствую, что что-то упустил.

У меня есть 2 объекта: A и B.B имеет ForeignKey для A с именем my_a, и по разным причинам мне нужно иметь ForeignKey на A к B, то есть A.the_b_used.В функции представления я хочу создать экземпляр A (a = A()) и экземпляр B (b = B()), а затем связать их вместе.Однако мои объекты (a & b) должны иметь идентификаторы, прежде чем я смогу связать их (верно?), Поэтому я думаю, что вы должны сделать это:

a = A()
b = B()
a.save()
b.save()
a.the_b_used = b
b.my_a = a
a.save()
b.save()

Похоже, я должен сделать 4 .save(), то есть 4 операции записи в базу данных.Есть ли способ сделать это без необходимости выполнять столько операций с базой данных?Я могу упустить что-то простое.

1 Ответ

1 голос
/ 29 июля 2011

В большинстве случаев вам не нужно иметь внешний ключ от родительского объекта к дочернему объекту, если уже есть внешний ключ от дочернего объекта до родительского. Соответствие один-к-одному достигается за счет того, что столбец внешнего ключа дочернего объекта становится уникальным, так что только один дочерний элемент может ссылаться на конкретного родителя.

Предположим, что вы сделали именно это с 'A' в качестве дочернего элемента, имея столбец внешнего ключа для родительского элемента 'B'. Поскольку ссылка от b на a неявно указана в ссылке от a до b, вам не нужно знать идентификатор a, чтобы b был завершен.

a = A()
b = B()
b.save()

b имеет идентификатор, который мы можем использовать для a

a.the_b_used = b
a.save()

Это все, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...