django-扩展'auth.models.User'和用户登录、注销

django-扩展'auth.models.User'和用户登录、注销,django,django-authentication,Django,Django Authentication,如果我创建一个CustomUser模型,该模型继承自django.contrib.auth.models.User,如下所示: 在models.py中 class CustomUser(django.contrib.auth.models.User): customfield = TextField() ... 我还能用吗 django.contrib.auth.{authenticate,login,logout}以正常方式?我需要做一些额外的配置更改吗?我知道这些方法只适用

如果我创建一个
CustomUser
模型,该模型继承自
django.contrib.auth.models.User
,如下所示:

在models.py中

class CustomUser(django.contrib.auth.models.User):
    customfield = TextField()
    ...
我还能用吗
django.contrib.auth.{authenticate,login,logout}
以正常方式?我需要做一些额外的配置更改吗?我知道这些方法只适用于
User
对象,但从技术上讲,我的
CustomUser
is-a
User

目前,
authenticate(username=u,password=p)
总是返回
None
,即使是使用有效的凭据。

简要概述:
-扩展模型。AbstractUser
-在settings.py中设置AUTH_USER_模型

所有的细节都可以在这里找到:

自从Django 1.5(官方的,但对我来说不起作用)和1.6中的“稳定”以来,有一个功能可以以干净的方式扩展用户模型

首先:

->请注意,您只能通过以下方式加载用户模型:

from django.contrib.auth import get_user_model
User = get_user_model()
->一旦建立了数据库,就没有简单的方法来更改用户模型。数据库关系将中断,Django/South无法修复

->第三方模块必须与新布局兼容,并在其模型中引用“get_user_model()”

您必须为管理员添加一些代码以尊重您的新型号: 见:

要覆盖模型,您需要从
AbstractBaseUser
继承:

from django.contrib.auth.models import AbstractBaseUser

class MyUser(AbstractBaseUser):
    ...
    date_of_birth = models.DateField()
    height = models.FloatField()
    ...
    REQUIRED_FIELDS = ['date_of_birth', 'height']
AbstractBaseUser为您提供默认用户模型的所有属性。所以你不必关心电子邮件、用户名、名字、姓氏、密码等。 有关覆盖用户模型的详细信息:

在“设置”中,链接新模型:

AUTH_USER_MODEL = 'customauth.MyUser'

请阅读全文,这里有一些关于覆盖默认管理器、管理表单等的有趣提示。请记住,对现有项目进行更大的更改可能会带来很大的麻烦。

您使用的是哪个版本的django?@Marc
django==1.6.2
,感谢您的帮助MyUser是否可以与内置组一起使用,或者是否也必须对其进行修改。(即AUTH_USER_模型定义是否足以将其绑定在一起)?是的,只需在您的模型中传递PermissionsMixin(在django.contrib.AUTH.models中找到),此mixin将处理模型关系和方法