2011-07-29 24 views
0

這看起來像一個簡單的問題,但我覺得我失去了一些東西。有效的方法來創建2個Django對象與外鍵相互鏈接?

我有2個物品:AB。 B有一個外鍵給A,叫做my_a,由於各種原因,我需要在A到B上有一個外鍵,即A.the_b_used。在視圖函數中,我想創建A(a = A())的一個實例,以及B的一個實例(b = B()),然後將它們鏈接在一起。但是我的對象(一& B)需要有IDS之前,我可以聯繫他們,所以我認爲你必須要做到這一點(右):

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

在大多數情況下,如果已經有一個從子項返回給父項的外鍵,則不需要從父對象到子對象擁有一個foriegn鍵。通過使子對象上的外鍵列唯一,從而只有一個孩子可以鏈接到特定的父對象來實現一對一的對應關係。

假設你完成了這個'A'作爲孩子,有一個外鍵列父'B'。由於b返回到a的鏈接從ab的鏈接中隱含,因此您無需知道ab的ID是完整的。

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

b有一個 '身份證',我們可以使用a

a.the_b_used = b 
a.save() 

這就是你應該需要。