【问题标题】:Manager isn't available; 'auth.User' has been swapped for 'members.CustomUser'经理不可用; 'auth.User' 已替换为 'members.CustomUser'
【发布时间】:2019-07-20 22:33:42
【问题描述】:

当我希望出现注册错误Manager isn't available; 'auth.User' has been swapped for 'members.CustomUser' 时,我的代码有问题,我尝试解决其他问题,例如Manager isn't available; 'auth.User' has been swapped for 'members.CustomUser',但他们都要求替换User = User = get_user_model(),但我没有使用任何User我的代码或者我不知道我在哪里使用 that.im new 在 django、python、js 等中,所以如果我的问题很愚蠢,请原谅。

更多信息:1) 我使用Django Signup Tutorial 创建注册方法。首先它运行良好,但是在我扩展我的家庭作业项目后,我在其他应用程序(“产品”和“搜索”)中出现错误。在这个应用程序中。只需 memebers 与 User 和 CustomUser 一起使用。

模型.py:

from django.contrib.auth.models import AbstractUser



class CustomUser(AbstractUser):

    def __str__(self):
        return self.email

    class Meta:
        verbose_name = "member"
        verbose_name_plural = "members"

setting.py:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'card.apps.CardConfig',
    'members.apps.MembersConfig',
    'search.apps.SearchConfig',
    'products.apps.ProductsConfig',
    'rest_framework',
]

AUTH_USER_MODEL = 'members.CustomUser'

admin.py:

from django.contrib import admin
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin

from .forms import CustomUserCreationForm, CustomUserChangeForm
from .models import CustomUser



class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    model = CustomUser
    list_display = ['email', 'username']


admin.site.register(CustomUser, CustomUserAdmin)

form.py:

# users/forms.py
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser


class CustomUserCreationForm(UserCreationForm):
    class Meta(UserCreationForm):
        model = CustomUser
        fields = ('username', 'email')


class CustomUserChangeForm(UserChangeForm):
    class Meta:
        model = CustomUser
        fields = ('username', 'email')

错误:

27/Feb/2019 12:36:01] "GET /signup/ HTTP/1.1" 200 5293
Internal Server Error: /signup/
Traceback (most recent call last):
  File "C:\shopping\venv\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\shopping\venv\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\shopping\venv\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\shopping\venv\lib\site-packages\django\views\generic\base.py", line 68, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\shopping\venv\lib\site-packages\django\views\generic\base.py", line 88, in dispatch
    return handler(request, *args, **kwargs)
  File "C:\shopping\venv\lib\site-packages\django\views\generic\edit.py", line 172, in post
    return super().post(request, *args, **kwargs)
  File "C:\shopping\venv\lib\site-packages\django\views\generic\edit.py", line 141, in post
    if form.is_valid():
  File "C:\shopping\venv\lib\site-packages\django\forms\forms.py", line 185, in is_valid
    return self.is_bound and not self.errors
  File "C:\shopping\venv\lib\site-packages\django\forms\forms.py", line 180, in errors
    self.full_clean()
  File "C:\shopping\venv\lib\site-packages\django\forms\forms.py", line 383, in full_clean
    self._post_clean()
  File "C:\shopping\venv\lib\site-packages\django\contrib\auth\forms.py", line 107, in _post_clean
    super()._post_clean()
  File "C:\shopping\venv\lib\site-packages\django\forms\models.py", line 403, in _post_clean
    self.instance.full_clean(exclude=exclude, validate_unique=False)
  File "C:\shopping\venv\lib\site-packages\django\db\models\base.py", line 1137, in full_clean
    self.clean()
  File "C:\shopping\venv\lib\site-packages\django\contrib\auth\models.py", line 338, in clean
    self.email = self.__class__.objects.normalize_email(self.email)
  File "C:\shopping\venv\lib\site-packages\django\db\models\manager.py", line 188, in __get__
    cls._meta.swapped,
AttributeError: Manager isn't available; 'auth.User' has been swapped for 'members.CustomUser'
[27/Feb/2019 12:36:04] "POST /signup/ HTTP/1.1" 500 113770

【问题讨论】:

  • members 是您的应用名称吗?
  • 是的。 from django.apps import AppConfig class MembersConfig(AppConfig): name = 'members'
  • 你在members/__init__.py中设置了default_app_config吗?
  • 不,我一生中从未编辑过 init.py 中的任何内容。我检查它是否为空。

标签: django django-custom-user


【解决方案1】:

修改views.py

from django.contrib.auth.forms import UserCreationForm
from django.urls import reverse_lazy
from django.views import generic


class SignUp(generic.CreateView):
    form_class = UserCreationForm
    success_url = reverse_lazy('login')
    template_name = 'signup.html'

from .forms import CustomUserCreationForm
from django.urls import reverse_lazy
from django.views import generic


class SignUp(generic.CreateView):
    form_class = CustomUserCreationForm
    success_url = reverse_lazy('login')
    template_name = 'signup.html'

【讨论】:

    【解决方案2】:

    在您的 forms.py 中进行更改:

    from django.contrib.auth import get_user_model
    
    class CustomUserChangeForm(UserChangeForm):
        class Meta:
            model = get_user_model()
            fields = ('username', 'email')
    
    class CustomUserCreationForm(UserCreationForm):
        class Meta:
            model = get_user_model()
            fields = ('username', 'email')
    

    在您的 members/init.py 文件中添加此脚本:

        default_app_config = 'members.apps.MembersConfig'
    

    【讨论】:

    • 获取错误:未定义名称“UserChangeForm”。然后我from django.contrib.auth.forms import UserCreationForm, UserChangeForm 和老问题仍然存在。
    • 能否在admin.py文件中添加这些表单,并在admin.py文件中去掉这些表单的导入?
    • 我改变了你告诉我的 form.py 和 members/init.py 但错误仍然存​​在.py 文件'我不明白你的意思。你能给我留下代码吗?
    • 这是我在 github 上的作业。我认为这是找到问题的简单方法。GitHub Project。 tnx
    • 我去看看。
    猜你喜欢
    • 2021-12-24
    • 2018-07-27
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    • 2018-04-21
    • 1970-01-01
    相关资源
    最近更新 更多