创建2个使用ForeignKey相互链接的django对象的有效方法?

时间:2011-07-29 13:58:35

标签: python database django django-models performance

这似乎是一个简单的问题,但我觉得我错过了一些东西。

我有两个对象:AB。 B有一个名为my_a的ForeignKey,由于各种原因,我需要在A到B上有一个ForeignKey,即A.the_b_used。在视图函数中,我想创建A(a = A())的实例和B(b = B())的实例,然后将它们链接在一起。但是我的对象(a& b)需要有id才能链接它们(对吧?),所以我认为你必须这样做:

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 个答案:

答案 0 :(得分:1)

在大多数情况下,如果已经有一个从子对象返回到父对象的外键,则不需要从父对象到子对象的foriegn密钥。通过使子对象上的外键列唯一,从而只有一个子项可以链接到特定父对象来实现一对一的对应关系。

假设您使用'A'作为孩子,并将父键'B'设为外键列。由于从ba的链接隐含了从a返回b的链接,因此您无需知道a的ID b完成。

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

b有'id',我们可以将其用于a

a.the_b_used = b
a.save()

这就是你应该需要的一切。