在Django中创建自定义用户模型时,从models.Model和AuthUser继承有什么区别?

时间:2017-01-26 05:41:04

标签: python django authentication django-models

我已经看到了两种在Django中扩展User模型的方法。

方法1:

class User(AuthUser):
    new fields...

方法2:

class MyUser(models.Model):
    user = models.OneToOneField(User)
    new fields...

他们之间有什么区别?

1 个答案:

答案 0 :(得分:1)

第一个是multi table inheritance。 (我认为你实际上是在讨论django.contrib.auth.models.User)。您的新用户模型将包含django用户模型中定义的所有字段。这是由django在模型上隐式创建OneToOneField来管理的。

第二个,你自己创建OneToOneField。现在,django.contrib.auth.model.User模型的字段不会自动显示为您自己模型的一部分。你仍然可以访问它们

 myinstance.user.parent_field

说完所有这些,对于选项1 you should inherit from an abstract base class而不是直接来自User模型。

class MyUser(AbstractBaseUser):
   ...