2011-05-05 66 views
3

這是我打的心情。對於我所有的foreignKeys,我應該在Django中使用User還是UserProfile?

我有User和ProfileUser。我想向模型添加額外的邏輯,因爲我不能將它添加到Django User模型中,所以我必須將其添加到ProfileUser。目前我所有的模型都有ForeignKey(用戶)。我應該保留它們還是應該在其他模型上使用ForeignKey(UserProfile)?

舉例我的看法,如果我保持ForeignKey的(用戶):

class myview(request): 
    user = request.user 
    userProfile = user.get_profile() 
    neededStuff = userProfile.get_needed_stuff() 

,然後在用戶配置模式:

def get_needed_stuff(self): 
    user= self.user # Or actually, is this right 
    goals = Goal.objects.get(<conditions that i wont bother writing here>) 
    return goals 

因此,對於這種情況,並且爲網站的進一步發展,我應該使用哪個外鍵?

+0

首先,弄清楚''應該是什麼。 – 2011-05-05 18:38:21

+0

我知道我的條件,但他們很複雜,所以我沒有打擾他們寫作。它與註冊日期,投票,聲譽等有關 – mgPePe 2011-05-05 18:39:37

回答

2

我想你應該使用用戶。 UserProfile應該是自定義的,並且可以在每個項目上有所不同。因此,如果您將另一個項目使用相同的代碼,則可能因此而失敗。在代碼中獲取用戶對象總是很容易的,並且你沒有任何問題可以像顯示的那樣獲取配置文件user.get_profile()(並且始終不需要配置文件)。所以一般我認爲使用其他模塊並將它們傳遞給用戶對象(或ID)而不是簡檔會更容易。

什麼也可以是解決方案 - 寫你自己的班級,將負責用戶。只需編寫方法來返回配置文件,返回stuff_needed或任何你想要的和一切,只需通過傳遞用戶對象和額外的參數來獲得你想要的。因此在我看來,它更符合邏輯,而用戶模型總是最主要的(你總是擁有它),UserProfile只是擴展。

Ignas

+0

此外,我認識到,如果你帶來任何外部應用程序,他們將使用用戶,而不是配置文件,這也需要考慮。 – mgPePe 2011-05-07 16:07:25

+0

Yeap,這是真的:) – 2011-05-08 05:16:36

1

如果您只希望屬於特定用戶的所有目標都在您的目標模型中向用戶添加外鍵。

class Goal(models.Model): 
    user = models.ForeignKey(User) 

def myview(request): 
    goals = Goal.objects.filter(user=request.user) 

或者交替地節省用戶的所有目標上的用戶配置模型,並做

def myview(request): 
    user_profile = user.get_profile() 
    goals = user_profile.goals 

...或使用方法做處理,計算他們

goals = user_profile.calculate_goals() 
0

我我一直在爲我的一個網站琢磨同樣的事情,但我決定使用UserProfile而不是User。 不知道它是否是正確的決定,但它似乎更靈活。