为什么用户模型继承不能正常工作?

时间:2010-02-16 16:28:52

标签: python django inheritance django-models

我正在尝试在我的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/

的示例

1 个答案:

答案 0 :(得分:4)

与您链接的博客文章相反,将此类数据存储在个人资料模型中仍然是Django推荐的方式。子类化User有各种各样的问题,其中一个就是你要打的那个:Django不知道你有子类User并且在Django代码库中愉快地创建和读取User个模型。对于您可能想要使用的任何其他第三方应用程序也是如此。

在Django的问题跟踪器上查看this ticket,以了解子类化User的潜在问题