ModelName(django.contrib.auth.models.User)vs ModelName(models.Model)

时间:2011-11-20 17:46:05

标签: django django-models web

我正在开发一个django项目。我创建了一些应用程序,其中一些与用户模型有关,例如,我有一个处理用户提要的提要应用程序,另一个应用程序处理额外的用户数据,如年龄,联系人和朋友。对于其中的每一个,我创建了一个应该连接到User模型的表,我用它来存储和验证用户。

我找到了两种方法来处理这个问题。一,是通过扩展User模型来实现这样的:

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

二,通过向新表添加一个外键,如下所示:

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

我无法决定在哪种情况下使用哪个。换句话说,两者之间的核心差异是什么?

1 个答案:

答案 0 :(得分:2)

无论哪种方式都在技术上有效。对User模型进行子类化实际上与子类化models.Model相同,然后包含user = models.OneToOneField(User)行。

尽管如此,Django book选择了models.Model路线。我也同意这在语法上更直接。

我还会指向Django文档的storing additional information about users部分,该部分将教您AUTH_PROFILE_MODULE设置和get_profile()方法。使用它们是非常好的做法。