如何正确扩展django用户模型

mik*_*eck 3 django django-models django-authentication

我正在尝试使用其他字段和功能来扩展默认的Django的身份验证模型,因此我决定继续扩展用户模型并编写自己的身份验证后端.

from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User


class MyUser(User):
    access_key = models.CharField(_('Acces Key'), max_length=64)
Run Code Online (Sandbox Code Playgroud)

这是一个基本的代码,但在尝试syncdb时,我正在考虑一个谷歌不知道的奇怪错误:

CommandError: One or more models did not validate: core.sldcuser: 'user_ptr' defines a relation with the model 'auth.User', which has been swapped out. Update the relation to point at settings.AUTH_USER_MODEL.

在我的settings.py中,我添加了我想要的内容:

AUTH_USER_MODEL = 'core.MyUser'
Run Code Online (Sandbox Code Playgroud)

有没有人偶然发现这个错误?

或者也许我应该使用一对一的方式,或1t1与代理的混合?

Tho*_*mas 6

你现在正在做的是创建一个User的子类,它是非抽象的.这意味着创建一个表,该表具有指向表上主键的ForeignKey调用.但是,您通过设置执行的操作是告诉不要创建该表,因为您将使用它.可以理解Django有点困惑:Puser_ptrauth.UserAUTH_USER_MODELdjango.contrib.authMyUser

你需要做的是从AbstractUser或继承AbstractBaseUser.

  • 使用AbstractUser如果希望用户已经一切,只是想添加更多的字段
  • 使用AbstractBaseUser,如果你想从一个干净的状态开始,只有在继承的用户通用功能,而且实现自己的领域.

REF: