我正在尝试注册新用户并将其添加到现有组,但我遇到了此错误。
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'
这就是我解决此错误的方法。
当我在注册表单中使用默认用户模型而不是新的自定义用户模型时,遇到了此错误。我所要做的就是从 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 模型并将其更改为新的自定义用户模型,无论您在何处使用它