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


问题内容

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

方法1:

class User(AuthUser):
    new fields...

方法2:

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

它们之间有什么区别?


问题答案:

第一个是多表继承。(我想您实际上是在说django.contrib.auth.models.User。)您的新用户模型将具有django用户模型中定义的所有字段。这是由django在模型上隐式创建一个OneToOneField来管理的。

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

 myinstance.user.parent_field

说了这么多,对于选项1,您应该从抽象基类继承,而不是直接从User模型继承

class MyUser(AbstractBaseUser):
   ...