2012-08-07 146 views
2

我想弄清楚保存我使用django orm的模型的最佳方法。我有一個模型/表,User。另外,我有一個名爲ContactInfo的模型/表,我們在這裏存儲一個外鍵給用戶表。用外鍵保存django orm模型

我知道普通的django orm的做法是將ContactInfo模型的外鍵放到用戶模型中,但是在這一點上,我們不想添加任何東西到已經是單塊的用戶表中,所以我們把將外鍵插入到ContactInfo模型中。

我知道我可以將用戶模型存儲在ContactInfo模型中,調用保存在ContactInfo中,並且它應該保存用戶模型,但是如果我與用戶及其聯繫人信息存在一對多關係,該怎麼辦?我寧願在聯繫人信息模型/對象的(1多個)實例中沒有多個用戶表實例。

如果我能清除任何東西,請讓我知道。在當前時刻,我有最好的辦法是到的ContactInfo列表的一個實例存儲爲user.contact_info,並覆蓋保存用戶user.save()方法來檢查contact_info,而且如果它存在插入user.id到每個模型和保存。不幸的是,我覺得這有點麻煩,但是對於Django和Python來說,我不確定我的選擇。

任何幫助將不勝感激,謝謝!

+0

Django不提供多對多類型嗎?它會爲你創建「中間」表。 – imm 2012-08-07 05:00:39

回答

1

我不知道我是否正確理解你的問題。 Django爲1-N關係提供了很好的支持。如果ContactInfo的外鍵爲User,則默認情況下爲1-N映射。

 
ContactInfo ---------> User 
      N   1 

所以,只有一個User數據庫中的記錄,像這樣

 
Table User    Table ContactInfo 
--------------------------------------------- 
id  user_name    id  user_id 
1  someone    1   1 
           2   1 
           3   1 

而且你也不需要重寫save方法。當你需要如果你使用上面的方法插入一個新ContactInfo記錄添加聯繫人,

contact = ContactInfo(user=target_user) 
# other stuff 
contact.save() 
#or 
target_user.contactinfo_set.create(...)#contactinfo_set is the related name of target_user 
#Django maintains the foreign key things. 

,那麼你並不需要遍歷您contact_info列表中插入user.id到數據庫中。

0

我不知道,如果你的意思定製User模型或標準模型附帶Django的。如果是後者,則Django提供存儲附加信息的標準方式,稱爲用戶配置文件,與每個用戶相關聯。有關詳細信息,請參見this section in the documentation

+0

是啊,對不起,我知道有一個用戶模型,我剛剛爲了這個問題的目的而改變了名字。我的實際模型不稱爲用戶,我對此感到抱歉。 – Brett 2012-08-07 14:22:47