【问题标题】:Manager isn't available; 'auth.User' has been swapped for 'accounts.User'经理不可用; 'auth.User' 已替换为 'accounts.User'
【发布时间】:2021-12-24 05:33:13
【问题描述】:

我创建了一个自定义用户模型“用户”并在 settings.py 中声明为 AUTH_USER_MODEL 我还有另外两个模型消费者和工人,它们与我的自定义用户有一对一的关系。 我创建了两个用于注册客户和工人的表格,但是当我填写表格(它甚至不检查验证)并提交时,它说:经理不可用; 'auth.User' 已替换为 'accounts.User'

models.py:

from django.contrib.auth.models import AbstractUser
from django.contrib.auth import  get_user_model

# Create your models here.

class User(AbstractUser):

    class Types(models.TextChoices):
        CONSUMER = "CONSUMER" , "Consumer"
        WORKMAN = "WORKMAN" , "Workman"
    type = models.CharField(max_length=20,choices=Types.choices,default=Types.WORKMAN)

    is_consumer = models.BooleanField(default=False)
    is_workman = models.BooleanField(default=False)

class Consumer(models.Model):
    user = models.OneToOneField(get_user_model(),on_delete=models.CASCADE,primary_key=True)
    location = models.CharField(max_length=100)

class Workman(models.Model):
    user = models.OneToOneField(get_user_model(),on_delete=models.CASCADE,primary_key=True)
    contact = models.CharField(max_length=100)

views.py:

from .forms import ConsumerCreationForm, WorkmanCreationForm
from .models import Workman,Consumer

class consumersignupview(CreateView):
    model = Consumer
    form_class = ConsumerCreationForm
    template_name = 'accounts/register.html'
    success_url = '/'


class workmansignupview(CreateView):
    model = Workman
    form_class = WorkmanCreationForm
    template_name = 'accounts/register.html'
    success_url = '/'

forms.py:

from django.contrib.auth.forms import UserCreationForm
from django import forms
from .models import Consumer,Workman

class ConsumerCreationForm(UserCreationForm):
    location = forms.CharField( max_length=100, required=False)
    class meta(UserCreationForm.Meta):
        model = Consumer
        
class WorkmanCreationForm(UserCreationForm):
    contact = forms.CharField(max_length=100)

    class meta(UserCreationForm.Meta):
        model = Workman

错误:

完整的追溯:

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/account/wregister/

Django Version: 3.2.9
Python Version: 3.8.2
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'accounts.apps.AccountsConfig']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback (most recent call last):
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\views\generic\base.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\views\generic\base.py", line 98, in dispatch
    return handler(request, *args, **kwargs)
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\views\generic\edit.py", line 172, in post
    return super().post(request, *args, **kwargs)
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\views\generic\edit.py", line 141, in post
    if form.is_valid():
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\forms\forms.py", line 175, in is_valid
    return self.is_bound and not self.errors
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\forms\forms.py", line 170, in errors
    self.full_clean()
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\forms\forms.py", line 374, in full_clean
    self._post_clean()
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\contrib\auth\forms.py", line 117, in _post_clean
    super()._post_clean()
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\forms\models.py", line 413, in _post_clean
    self.instance.full_clean(exclude=exclude, validate_unique=False)
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\db\models\base.py", line 1223, in full_clean
    self.clean()
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\contrib\auth\models.py", line 371, in clean
    self.email = self.__class__.objects.normalize_email(self.email)
  File "F:\Project Work\Proxy-Model\venv\lib\site-packages\django\db\models\manager.py", line 187, in __get__
    raise AttributeError(

Exception Type: AttributeError at /account/wregister/
Exception Value: Manager isn't available; 'auth.User' has been swapped for 'accounts.User'

【问题讨论】:

  • 分享完整回溯。通常,Django 错误页面具有将错误转换为文本格式的功能,包括设置、回溯等。
  • 您是否在设置文件中添加了“AUTH_USER_MODEL = "accounts.User"??
  • 添加了回溯,是的,我在设置文件中添加了“AUTH_USER_MODEL = "accounts.User"。

标签: python django django-forms django-registration django-custom-user


【解决方案1】:

此错误是this issue 的重复。您可能在某处导入了错误的用户模型。

【讨论】:

  • 是的,我通过了这些解决方案,但在我的代码中没有提到任何“用户”,所以解决方案没有太大帮助。
  • 嗯,您如何将User 附加到消费者?它似乎是基于模型的必填字段,但我没有看到您在视图中的任何位置分配它。您也不需要导入get_user_model(),因为模型在同一个文件中。
  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2019-07-20
  • 2018-07-27
  • 2020-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 2018-04-21
  • 1970-01-01
相关资源
最近更新 更多