Django所有权用户或UserExtenstion的外键

时间:2013-01-13 20:18:44

标签: database django django-models django-authentication django-users

我对Django很新,到目前为止,我有一个非常基本的设置,我将一个额外的模型附加到(django.contrib.auth.models)的默认用户模型。在我的accounts.models.py中,我有以下内容:

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

我还有另一个需要指定所有者的模型。我的问题是:哪个更好(更多django-ish,更具可读性,更高效,更灵活)的方式来表示所有者:

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

或:

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

如果你提到这些方法的利弊,我将非常感激。

2 个答案:

答案 0 :(得分:0)

我推荐第一个选项。用户模型是非平凡模型,在某种意义上说,拥有的对象不应该在没有用户的情况下存在,但可以在没有UserExtension的情况下存在。

另外请注意,在Django 1.5中,您可以创建自定义用户模型,从而无需使用UserExtension类。有关详细信息,请参阅documentation

答案 1 :(得分:0)

考虑对每个用户的附加信息使用UserProfile。查看此blog以了解如何操作。然后,您可以放心,每次创建用户时都要创建UserProfile对象。

现在,您在用户或用户配置文件上的FK在逻辑上取决于您在Owned中所做的事情。如果拥有使用用户的数据/字段,FK在用户;如果它适用于UserProfile的数据,则在UserProfile上使用FK。