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

Django替换默认用户模型后注册报错:AttributeError: Manager不可用

问题描述

注册新用户并添加到组时出现错误:AttributeError: Manager isn't available; 'auth.User' has been swapped for 'main.CustomUser',自修改用户模型(添加point字段并执行迁移)后注册功能失效。

相关代码

models.py

class CustomUser(AbstractUser):
    point = models.IntegerField(default=0)

class App(models.Model):
    appname = models.CharField(max_length=255)
    link = models.CharField(max_length=100)
    category= models.CharField(max_length=100)
    subcategory = models.CharField(max_length=100)
    points = models.IntegerField()
    created_at = models.DateTimeField(auto_now_add=True, null=True)
    appicon = models.ImageField(upload_to='icon/')

    def __str__(self):
        return self.appname

注册视图

def sign_up(request):
    if request.method == "POST":
        form = RegisterForm(request.POST)
        if form.is_valid():
            user = form.save()
            user_group, created = Group.objects.get_or_create(name='user')
            user.groups.add(user_group)
            login(request, user)
            return redirect('/app')
    else:
        form = RegisterForm()
    return render(request,'registration/signup.html', {'form':form})

settings.py配置

AUTH_USER_MODEL = 'main.CustomUser'

报错回溯

Internal Server Error: /app/signup/
Traceback (most recent call last):
  File "D:\01 tasks\pro 2 and try outs\django main\venv\Lib\site-packages\django\core\handlers\exception.py", line 55, in inner
    response = get_response(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "D:\01 tasks\pro 2 and try outs\django main\venv\Lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)    
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^    
  File "D:\01 tasks\pro 2 and try outs\django main\main\views.py", line 87, in sign_up
    if form.is_valid():
       ^^^^^^^^^^^^^^^
  File "D:\01 tasks\pro 2 and try outs\django main\venv\Lib\site-packages\django\forms\forms.py", line 197, in is_valid
    return self.is_bound and not self.errors
                                 ^^^^^^^^^^^
  File "D:\01 tasks\pro 2 and try outs\django main\venv\Lib\site-packages\django\forms\forms.py", line 192, in errors
    self.full_clean()
  File "D:\01 tasks\pro 2 and try outs\django main\venv\Lib\site-packages\django\forms\forms.py", line 327, in full_clean
    self._clean_fields()
  File "D:\01 tasks\pro 2 and try outs\django main\venv\Lib\site-packages\django\forms\forms.py", line 342, in _clean_fields
    value = getattr(self, "clean_%s" % name)()
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\01 tasks\pro 2 and try outs\django main\venv\Lib\site-packages\django\contrib\auth\forms.py", line 163, in clean_username
    and self._meta.model.objects.filter(username__iexact=username).exists()    
        ^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\01 tasks\pro 2 and try outs\django main\venv\Lib\site-packages\django\db\models\manager.py", line 196, in __get__
    raise AttributeError(
AttributeError: Manager isn't available; 'auth.User' has been swapped for 'main.CustomUser'
解决方案

错误根源是你使用的RegisterForm大概率是默认的UserCreationForm,它硬关联了auth.User模型,而你已经在settings中替换为自定义的CustomUser,导致表单验证时调用了已被弃用的auth.User的manager。

解决步骤:

  1. 自定义注册表单
    在你的app下创建forms.py,编写适配自定义用户模型的表单:
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import get_user_model

class RegisterForm(UserCreationForm):
    class Meta:
        model = get_user_model()  # 动态获取当前配置的用户模型
        fields = ('username', 'email', 'password1', 'password2')  # 根据需求添加字段
  1. 更新视图导入
    确保视图中导入的是你自定义的RegisterForm,而不是默认的表单:
from .forms import RegisterForm  # 替换原来的导入
  1. 验证迁移
    确保所有迁移已正确执行:
python manage.py makemigrations
python manage.py migrate

这样修改后,表单会正确关联你的CustomUser模型,验证时调用正确的manager,错误即可解决。用户添加组的逻辑无需修改,因为AbstractUser已经自带groups关联字段,和Group模型的交互是正常的。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:44:59