我已经看到了两种在Django中扩展User模型的方法。
方法1:
class User(AuthUser):
new fields...
方法2:
class MyUser(models.Model):
user = models.OneToOneField(User)
new fields...
他们之间有什么区别?
答案 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):
...