在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):
...