1

我對Django很新穎,到目前爲止,我有一個非常基本的設置,我將一個額外的模型附加到來自(django.contrib.auth.models)的默認用戶模型。在我的accounts.models.py我有一些行:Django所有權用戶或用戶擴展的外鍵

class UserExtension(models.Model): 
    user = models.OneToOneField(User, primary_key=True) 
    # more code 

我也有另一個模型,需要指定一個所有者。我的問題是:哪個是更好的(更Django的十歲上下,更具可讀性,更高效,更靈活的)的方式來表示業主:

class Owned(models.Model): 
    # code 
    owner = models.ForeignKey(User) 
    # more code 

或:

class Owned(models.Model) 
    # code 
    owner = models.ForeignKey(UserExtension) 
    # more code 

我會很感激如果你提到這些方法的優點和缺點。

回答

0

我推薦第一個選項。用戶模型是非平凡模型,即所擁有的對象不應該能夠在沒有用戶的情況下存在,但可以在沒有UserExtension的情況下存在。

還要考慮在Django 1.5中,您可以創建自定義用戶模型,而不需要UserExtension類。有關更多信息,請參閱documentation

+0

謝謝你關於Django 1.5的說明,我不知何故肯定錯過了它,但儘管是RC,但我很可能會轉移到它。在附註中,在我的例子和擁有的對象中,應該由具有UserExtension的用戶擁有,而不是例如超級用戶(這是純粹的管理並且沒有UserExtension)。你認爲這樣做有點矯枉過正,以確保這種情況不會發生在數據庫和編程上? – dmg

+0

對我來說,在大多數情況下,以編程方式確保安全。一般來說 - 如果你創建了自己的用戶模型 - 除非你有充分的理由不這樣做,我不會在不同類型的用戶模型之間劃分界限(例如爲管理員和普通用戶分開模型)。 – Teisman

0

考慮使用UserProfile來獲取每個用戶的附加信息。看看這個blog看看怎麼做。然後您可以放心,您每次創建用戶時都會創建UserProfile對象。

現在您在User或UserProfile上的FK是否取決於您在Owned內正在執行的操作。如果擁有與用戶的數據/字段一起使用,則用戶使用FK;如果它與UserProfile的數據一起工作,則在UserProfile上使用FK。