当我注册新用户时,我遇到此错误:AttributeError:经理不可用; “auth.User”已替换为“main.CustomUser”

问题描述 投票:0回答:1

我正在尝试注册新用户并将其添加到现有组,但我遇到了此错误。

AttributeError:管理器不可用; “auth.User”已替换为“main.CustomUser”

首先,我认为此错误是由于将用户添加到默认组引起的,但似乎从我通过添加点字段更改用户模型并进行迁移的那一刻起,注册就无法按预期工作

这是我的 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'
django django-models django-views django-users django-custom-user
1个回答
0
投票

这就是我解决此错误的方法。

当我在注册表单中使用默认用户模型而不是新的自定义用户模型时,

遇到了此错误。我所要做的就是从 models.py 中导入新的自定义用户模型,在我的注册表单中使用它并删除默认的用户导入。

forms.py 文件中的两个片段

# from django.contrib.auth.models import User
from .models import App, UploadedImage, CustomUser
from django.contrib.auth.forms import UserCreationForm
class RegisterForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = CustomUser 
        #model = User this is the line that caused the error
        fields = ['username', 'email', 'password1', 'password2']

这是在settings.py文件中

AUTH_USER_MODEL = 'main.CustomUser'

注意,您应该从 forms.py、models.py、views.py 文件中删除旧的 User 模型并将其更改为新的自定义用户模型,无论您在何处使用它

© www.soinside.com 2019 - 2024. All rights reserved.