2011-11-20 18 views
1

我正在開發一個django項目。我創建了一些應用程序,其中一些與用戶模型相關,例如,我有一個用於處理用戶提要的提要應用程序,另一個用於處理額外的用戶數據(如年齡,聯繫人和朋友)的應用程序。對於其中的每一個,我創建了一個應該連接到用戶模型的表格,我使用它來存儲和驗證用戶。ModelName(django.contrib.auth.models.User)vs ModelName(models.Model)

我發現了兩種方法來處理這個問題。一,通過擴展用戶模型是這樣的:

ModelName(User): 
    friends = models.ManyToMany('self') 
    ..... 

二,通過添加外鍵到新表是這樣的:

ModelName(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    friends = friends = models.ManyToMany('self') 
    ...... 

我不能決定其使用這種情況下。換句話說,兩者的核心區別是什麼?

+0

參見例如http://stackoverflow.com/questions/5452288/django-why-create-a-onetoone-to-userprofile-instead-of-subclassing-auth-user – second

+0

我認爲這個問題是我正在尋找的 –

+0

不,我不要以爲你一直在尋找。這個問題有*幾個*重複。 –

回答

2

無論哪種方式將技術上的工作。子類User模型與子類models.Model實際上是相同的,然後包括user = models.OneToOneField(User)線。

這就是說,對於它的價值,Django book選擇models.Model路線。我也同意這在語法上更直接。

我還會指出Django文檔的storing additional information about users部分,它將向您介紹有關AUTH_PROFILE_MODULE設置和get_profile()方法的信息。這是最好的做法。

+0

我同意@Luke,從'User'模型繼承並不是一個好主意。創建一個'UserProfile'模型是更好的做法。使用'get_profile()',和其他任何解決方案一樣快。 – juliomalegria

+0

繼承'User'是一個可怕的想法。但是這個答案並不能解釋爲什麼*。 –

+0

我沒有看到爲什麼從'User'繼承是一個*內在*糟糕的想法(Django允許模型繼承的原因)的任何特殊原因。我認爲遵循框架公佈的最佳實踐總是更好,在這種情況下,已經有一種Django方法可以*完全*做好OP的任務。 –

相關問題