2011-07-29 1 views
0

これは簡単な質問のようですが、私は何か不足しているように感じます。ForeignKeyでお互いにリンクする2つのdjangoオブジェクトを効率的に作成するには?

私は2つのオブジェクト:ABを持っています。 Bにはmy_aと呼ばれるAへの外部キーがあります。さまざまな理由から、AからBへのForeignKey(つまりA.the_b_used)が必要です。ビュー関数では、A(a = A())のインスタンスとB(b = B())のインスタンスを作成し、それらをリンクしたいと考えています。しかし、私のオブジェクト(& 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

ほとんどの場合、子オブジェクトから親オブジェクトへの外部キーが既に存在する場合、親オブジェクトから子オブジェクトへのforiegnキーを持つ必要はありません。 1対1の対応は、子オブジェクト上の外部キー列をユニークにすることによって達成され、その結果、1人の子供だけが特定の親にリンクすることができる。

「A」を子として「B」の親キーに外部キー列を設定しているとします。 bからaへのリンクはaからbへのリンクから暗黙的に指定されているため、bを完了するにはaのIDを知る必要はありません。

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

bは、我々はあなたが必要とする必要があるすべてですa

a.the_b_used = b 
a.save() 

のために使用できる 'ID' を、持っています。

関連する問題