You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django问题:无法用自定义用户模型替换默认用户模型

解决Django自定义用户模型不生效的问题

我一眼就发现了一个致命的拼写错误,这大概率是问题的核心!咱们一步步来排查和修复:

1. 修正AUTH_USER_MODEL的拼写错误

你在settings.py里写的是AUTH_USER_MODEl(最后一个字母是小写的l),但正确的配置项名称是AUTH_USER_MODEL(最后一个字母是大写的L)。这个拼写错误会让Django直接忽略你的自定义用户配置,继续使用默认的User模型。

把配置改成正确的写法:

AUTH_USER_MODEL = 'userProfile.myUser'

2. 确保在首次迁移前就配置了自定义用户模型

如果是在已经运行过python manage.py migrate命令之后才添加的AUTH_USER_MODEL配置,Django已经创建了默认用户相关的数据库表,这时候再修改配置是不会生效的。解决步骤如下:

  • 先备份你的数据库(如果有需要保留的数据)
  • 删除项目根目录下的db.sqlite3文件(如果使用的是默认SQLite数据库)
  • 删除所有app目录下migrations文件夹中,除了__init__.py之外的所有迁移文件
  • 重新执行迁移命令:
    python manage.py makemigrations
    python manage.py migrate
    

3. 正确在Admin后台注册自定义用户模型

你需要在userProfile/admin.py里明确注册你的自定义用户模型,并且关联对应的Admin类(比如继承UserAdmin),这样Admin后台才会显示你的自定义用户而不是默认模型。示例代码如下:

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import myUser

# 如果你的自定义用户有额外字段,可能需要自定义UserAdmin来展示这些字段
class CustomUserAdmin(UserAdmin):
    # 根据你的myUser模型字段,调整list_display、fieldsets等配置
    list_display = ('username', 'email', 'is_staff', 'is_active')

admin.site.register(myUser, CustomUserAdmin)

4. 确保表单关联自定义用户模型

在userProfile/forms.py中,所有涉及用户创建、编辑的表单都应该基于你的myUser模型,而不是默认的User模型。比如用户注册表单可以这样写:

from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import myUser

class CustomUserCreationForm(UserCreationForm):
    class Meta:
        model = myUser
        fields = ('username', 'email', 'first_name', 'last_name') # 替换成你的模型字段

class CustomUserChangeForm(UserChangeForm):
    class Meta:
        model = myUser
        fields = ('username', 'email', 'first_name', 'last_name', 'is_staff')

完成以上步骤后,重新运行项目,再执行python manage.py createsuperuser,创建的超级用户就会属于你的自定义myUser模型,Admin后台也会显示自定义用户的管理界面了。

内容的提问来源于stack exchange,提问作者Vaibhav Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:25:36