2010-04-24 33 views
0

劇情簡介:每個用戶帳戶都有一個UserProfile來存放電話號碼,地址等擴展信息。然後,用戶帳戶可以有多個標識。有多種類型的身份持有不同類型的信息。該結構將是像這樣:Django - 具有多個身份的用戶帳戶

User 
    |<-FK- UserProfile 
    | 
    |<-FK- IdentityType1 
    |<-FK- IdentityType1 
    |<-FK- IdentityType2 
    |<-FK- IdentityType3 (current) 
    |<-FK- IdentityType3 
    |<-FK- IdentityType3 

用戶帳戶可以連接到不同類型的身份的n個,但只能在同一時間使用一個認同。

看起來,Django的方式是將所有連接的身份(user.IdentityType1_set.select_related())收集到一個QuerySet中,然後檢查每個身份的某個'當前'字段。

問題:任何人都可以想到一個更好的方法來選擇'當前'標記身份比做三個數據庫查詢(每個身份類型一個)?

回答

2

爲什麼不跟蹤會話中使用哪個配置文件而不是數據庫。將狀態存儲在數據庫中是沒有意義的,這就是會話的用途。

+0

您提出了一個非常好的觀點。因此,在三種IdentityType模型之間,您需要某種獨特的ID作爲字符串存儲在會話中,對嗎?或者,僅僅存儲一個僅適用於該類型的身份類型和ID的難度是否會更小?對不起,我還在學習...... – Scott 2010-04-24 20:43:27

+0

那麼會話對用戶來說已經是獨一無二的了,只需存儲identityType的ID? – 2010-04-25 00:53:08

1

讓UserProfile跟蹤當前正在使用哪個標識可能不錯。

假設每個身份是一個不同的模型,你可以做兩件事之一來做到這一點。

  • 你可以有每個標識類繼承自共同的父模型類,你可以在配置文件父身份類添加一個外鍵。

  • 或者,如果繼承沒有實際意義,則可以使用generic relations

+0

謝謝,但我認爲這會增加一層額外的複雜性,我還不能處理... – Scott 2010-04-24 21:40:54

相關問題