我想在我的系统中实现用户.我知道Django已经有了一个身份验证系统,我一直在阅读文档.但我不知道它们之间的区别
from django.contrib.auth.models import User
class Profile(User):
# others fields
Run Code Online (Sandbox Code Playgroud)
和
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User)
# others fields
Run Code Online (Sandbox Code Playgroud)
我不想知道为什么要使用这一个或另一个,但是在引擎盖下会发生什么.有什么不同?
您的第一个示例是多表继承.
class Profile(User):
Run Code Online (Sandbox Code Playgroud)
如果您有profile,则可以直接访问用户模型上的所有字段(例如profile.username和profile.email).在这种情况下,Django会OneToOneField自动为您创建一个.
第二个例子是常规的OneToOneField.
class Profile(models.Model):
user = models.OneToOneField(User)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您无法访问profile.username和profile.email.相反,您可以通过一对一字段(例如profile.user.username和profile.user.email)访问这些字段 .
在您的情况下,在添加配置文件模型的情况下,我会避免使用继承,而是使用一对一的字段.该User模型具有自定义管理员来处理密码.如果使用多表继承,那么您的Profile模型也必须处理它.通过使用一对一字段,自定义管理员可以处理用户字段,而您的Profile模型管理员只需处理其他配置文件字段.
另一种选择是创建自定义用户模型.在这种情况下,您将子类化为抽象类AbstractUser或AbstractBaseUser代替类User.如果您的Profile类有效,那么我建议使用它而不是自定义用户模型,因为自定义用户模型设置起来比较复杂.
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |