我正在尝试在我的django应用程序中使用用户模型继承。模型看起来像这样:
from django.contrib.auth.models import User, UserManager
class MyUser(User):
ICQ = models.CharField(max_length=9)
objects = UserManager()
和身份验证后端如下所示:
import sys
from django.db import models
from django.db.models import get_model
from django.conf import settings
from django.contrib.auth.models import User, UserManager
from django.contrib.auth.backends import ModelBackend
from django.core.exceptions import ImproperlyConfigured
class AuthBackend(ModelBackend):
def authenticate(self, email=None, username=None, password=None):
try:
if email:
user = self.user_class.objects.get(email = email)
else:
user = self.user_class.objects.get(username = username)
if user.check_password(password):
return user
except self.user_class.DoesNotExist:
return None
def get_user(self, user_id):
try:
return self.user_class.objects.get(pk=user_id)
except self.user_class.DoesNotExist:
return None
@property
def user_class(self):
if not hasattr(self, '_user_class'):
self._user_class = get_model(*settings.CUSTOM_USER_MODEL.split('.', 2))
if not self._user_class:
raise ImproperlyConfigured('Could not get custom user model')
return self._user_class
但是,如果我正在尝试进行身份验证 - self.user_class.objects.get(用户名=用户名)> 我的用户匹配查询不存在“错误打电话。看起来管理员用户在基本同步(我使用的是sqlite3)时创建了用户模型,而不是 MyUser (用户名和密码是正确的)。或者它有所不同?
我做错了什么?这是http://scottbarnham.com/blog/2008/08/21/extending-the-django-user-model-with-inheritance/
的示例答案 0 :(得分:4)
与您链接的博客文章相反,将此类数据存储在个人资料模型中仍然是Django推荐的方式。子类化User
有各种各样的问题,其中一个就是你要打的那个:Django不知道你有子类User
并且在Django代码库中愉快地创建和读取User
个模型。对于您可能想要使用的任何其他第三方应用程序也是如此。
在Django的问题跟踪器上查看this ticket,以了解子类化User
的潜在问题