Django 管理器不可用;“auth.User”已替换为“users.MyUser”

김용식*_*김용식 2 python django django-models django-users

我在 Django 1.11 中创建了自定义 UserModel,我需要一个允许用户登录的函数\n我认为我的自定义用户模型与我的函数不兼容\n我该如何修复?

\n\n

请参阅下图中的错误消息:

\n\n

在此输入图像描述

\n\n

用户.models.py

\n\n
from django.db import models\nfrom django.contrib.auth.models import AbstractBaseUser, BaseUserManager\nfrom apps.teams.models import Team\nimport uuid\n\nclass MyUserManager(BaseUserManager):\n    def _create_user(self, username, password, **extra_kwargs):\n        user = self.model(username=username, **extra_kwargs)\n        user.set_password(password)\n        user.save(using=self._db)\n        return user\n\n    def create_superuser(self, username, password, **extra_kwargs):\n        extra_kwargs.setdefault(\'is_active\', True)\n        extra_kwargs.setdefault(\'is_superuser\', True)\n        extra_kwargs.setdefault(\'is_staff\', True)\n\n        if extra_kwargs.get(\'is_superuser\', None) is not True:\n            raise ValueError(\'\xea\xb4\x80\xeb\xa6\xac\xec\x9e\x90 \xea\xb6\x8c\xed\x95\x9c\xec\x9d\xb4 \xed\x95\x84\xec\x9a\x94\xed\x95\xa9\xeb\x8b\x88\xeb\x8b\xa4.\')\n\n        return self._create_user(username, password, **extra_kwargs)\n\nclass MyUser(AbstractBaseUser):\n    """\n    \xec\x9c\xa0\xec\xa0\x80 \xeb\xaa\xa8\xeb\x8d\xb8\n    """\n    POSITION_TYPES = (\n        (\'a\', \'\xeb\x8c\x80\xed\x91\x9c\'),\n        (\'b\', \'\xed\x8c\x80\xec\x9e\xa5\'),\n        (\'c\', \'\xea\xb3\xbc\xec\x9e\xa5\'),\n        (\'d\', \'\xeb\x8c\x80\xeb\xa6\xac\'),\n        (\'e\', \'\xec\xa3\xbc\xec\x9e\x84\'),\n        (\'f\', \'\xec\x82\xac\xec\x9b\x90\'),\n        (\'g\', \'\xec\x9d\xb8\xed\x84\xb4\'),\n    )\n    uid = models.UUIDField(\n        primary_key=True,\n        editable=False,\n        default=uuid.uuid4,\n        verbose_name=\'\xed\x8c\x80 \xea\xb3\xa0\xec\x9c\xa0 \xec\x95\x84\xec\x9d\xb4\xeb\x94\x94\'\n    )\n    username = models.CharField(\n        max_length=20,\n        unique=True,\n        verbose_name=\'\xec\x95\x84\xec\x9d\xb4\xeb\x94\x94\'\n    )\n    name = models.CharField(\n        max_length=10,\n        verbose_name=\'\xec\x9d\xb4\xeb\xa6\x84\'\n    )\n    email = models.EmailField(\n        verbose_name=\'\xec\x9d\xb4\xeb\xa9\x94\xec\x9d\xbc\'\n    )\n    team = models.ForeignKey(\n        Team,\n        verbose_name=\'\xec\x86\x8c\xec\x86\x8d\',\n        null=True,\n        blank=True\n    )\n    position = models.CharField(\n        max_length=2,\n        choices=POSITION_TYPES,\n        default=\'g\',\n        verbose_name=\'\xec\xa7\x81\xea\xb8\x89\'\n    )\n    birth = models.DateField(\n        null=True,\n        blank=True,\n        verbose_name=\'\xec\x83\x9d\xec\x9d\xbc\'\n    )\n    date_joined = models.DateField(\n        null=True,\n        blank=True,\n        verbose_name=\'\xec\x9e\x85\xec\x82\xac\xec\x9d\xbc\'\n    )\n    date_exited = models.DateField(\n        null=True,\n        blank=True,\n        verbose_name=\'\xed\x87\xb4\xec\x82\xac\xec\x9d\xbc\'\n    )\n    is_superuser = models.BooleanField(\n        default=False,\n        verbose_name=\'\xea\xb4\x80\xeb\xa6\xac\xec\x9e\x90 \xec\x97\xac\xeb\xb6\x80\'\n    )\n    is_staff = models.BooleanField(\n        default=False,\n        verbose_name=\'\xec\x8a\xa4\xed\x83\x9c\xeb\xb8\x8c \xec\x97\xac\xeb\xb6\x80\'\n    )\n    is_active = models.BooleanField(\n        default=False,\n        verbose_name=\'\xed\x99\x9c\xec\x84\xb1\xed\x99\x94 \xec\x97\xac\xeb\xb6\x80\'\n    )\n\n    objects = MyUserManager()\n\n    USERNAME_FIELD = \'username\'\n\n\n    class Meta:\n        db_table = \'users\'\n\n    def __str__(self):\n        return self.username\n\n    def get_full_name(self):\n        return self.username\n\n    def get_short_name(self):\n        return self.username\n\n    def has_perm(self, perm, obj=None):\n        return True\n\n    def has_module_perms(self, module):\n        return True\n
Run Code Online (Sandbox Code Playgroud)\n\n

用户.forms.py

\n\n
from django import forms\nfrom django.contrib.auth.forms import UserCreationForm, AuthenticationForm\nfrom .models import MyUser\nfrom apps.teams.models import Team\n\n\nclass SignupFrom(UserCreationForm):\n    POSITION_TYPES = (\n        (\'a\', \'\xeb\x8c\x80\xed\x91\x9c\'),\n        (\'b\', \'\xed\x8c\x80\xec\x9e\xa5\'),\n        (\'c\', \'\xea\xb3\xbc\xec\x9e\xa5\'),\n        (\'d\', \'\xeb\x8c\x80\xeb\xa6\xac\'),\n        (\'e\', \'\xec\xa3\xbc\xec\x9e\x84\'),\n        (\'f\', \'\xec\x82\xac\xec\x9b\x90\'),\n        (\'g\', \'\xec\x9d\xb8\xed\x84\xb4\'),\n    )\n\n    username = forms.CharField(\n        required=True,\n        label="\xec\x95\x84\xec\x9d\xb4\xeb\x94\x94",\n        widget=forms.TextInput(\n            attrs={\n                \'class\':\'form-control\',\n                \'placeholder\': \'\xec\x95\x84\xec\x9d\xb4\xeb\x94\x94\',\n                \'required\' : \'True\',\n            }\n        )\n    )\n\n    password1 = forms.CharField(\n        required=True,\n        label="\xed\x8c\xa8\xec\x8a\xa4\xec\x9b\x8c\xeb\x93\x9c",\n        widget=forms.PasswordInput(\n            attrs={\n                \'class\': \'form-control\',\n                \'placeholder\': \'\xed\x8c\xa8\xec\x8a\xa4\xec\x9b\x8c\xeb\x93\x9c\',\n                \'required\' : \'True\'\n            }\n        )\n    )\n\n    password2 = forms.CharField(\n        required=True,\n        label="\xed\x8c\xa8\xec\x8a\xa4\xec\x9b\x8c\xeb\x93\x9c \xed\x99\x95\xec\x9d\xb8",\n        widget=forms.PasswordInput(\n            attrs={\n                \'class\': \'form-control\',\n                \'placeholder\': \'\xed\x8c\xa8\xec\x8a\xa4\xec\x9b\x8c\xeb\x93\x9c \xed\x99\x95\xec\x9d\xb8\',\n                \'required\': \'True\'\n            }\n        )\n    )\n\n    name = forms.CharField(\n        required=True,\n        label="\xec\x9d\xb4\xeb\xa6\x84",\n        widget=forms.TextInput(\n            attrs={\n                \'class\': \'form-control\',\n                \'placeholder\': \'\xec\x95\x84\xec\x9d\xb4\xeb\x94\x94\',\n                \'required\': \'True\',\n            }\n        )\n    )\n    email = forms.EmailField(\n\n        required=False,\n        label="\xec\x9d\xb4\xeb\xa9\x94\xec\x9d\xbc",\n        widget=forms.EmailInput(\n            attrs={\n                \'class\': \'form-control\',\n                \'placeholder\': \'\xec\x9d\xb4\xeb\xa9\x94\xec\x9d\xbc\',\n                \'required\': \'True\',\n            }\n        )\n    )\n    team = forms.ModelChoiceField(\n        required=True,\n        label="\xec\x86\x8c\xec\x86\x8d",\n        queryset=Team.objects.all(),\n        widget=forms.Select(\n            attrs={\n                \'class\': \'form-control\',\n            }\n        )\n    )\n\n    position = forms.ChoiceField(\n        required=False,\n        label="\xec\xa7\x81\xea\xb8\x89",\n        choices=POSITION_TYPES,\n        widget=forms.Select(\n            attrs={\n                \'class\': \'form-control\',\n                \'required\' : \'True\',\n            }\n        )\n\n    )\n    birth = forms.DateField(\n        label="\xec\x83\x9d\xec\x9d\xbc",\n        widget=forms.DateInput(\n            attrs={\n                \'class\': \'form-control\',\n                \'required\': \'True\',\n            }\n        )\n    )\n    date_joined = forms.DateField(\n        required=True,\n        label="\xec\x9e\x85\xec\x82\xac\xec\x9d\xbc",\n        widget=forms.DateInput(\n            attrs={\n                \'class\': \'form-control\',\n                \'required\': \'True\',\n            }\n        )\n    )\n\n    class Meata:\n        model = MyUser\n        fields = ("username", "name", "password1", "password2", "team", "position", "email", "birth", "date_joined")\n\n\nclass LoginForm(AuthenticationForm):\n    username = forms.CharField(\n        max_length=10,\n        widget=forms.TextInput(\n            attrs={\n                \'class\': \'form-control\',\n                \'placeholder\': \'\xec\x95\x84\xec\x9d\xb4\xeb\x94\x94\',\n                \'required\': \'True\',\n            }\n        )\n    )\n    password = forms.CharField(\n        widget=forms.PasswordInput(\n            attrs={\n                \'class\': \'form-control\',\n                \'placeholder\': \'\xed\x8c\xa8\xec\x8a\xa4\xec\x9b\x8c\xeb\x93\x9c\',\n                \'required\': \'True\',\n            }\n        )\n    )\n
Run Code Online (Sandbox Code Playgroud)\n\n

用户视图.py

\n\n
from django.shortcuts import render\nfrom django.http import HttpResponseRedirect\nfrom django.core.urlresolvers import reverse\n\nfrom .forms import SignupFrom\n\n\ndef signup(request):\n    signupform = SignupFrom()\n    if request.method == \'POST\':\n        signupform = SignupFrom(request.POST)\n        if signupform.is_valid():\n            user = signupform.save(commit=False)\n            user.save()\n            return HttpResponseRedirect(\n                reverse("sign_ok")\n            )\n    return render(request, "registration/signup.html", {"signupform": signupform})\n
Run Code Online (Sandbox Code Playgroud)\n\n

我设置了settings.py AUTH_USER_MODEL = \'users.MyUSer\'

\n

uit*_*waa 5

您已创建自定义用户。将其添加到 models.py、views.py、forms.py-

from django.contrib.auth import get_user_model
User = get_user_model()
Run Code Online (Sandbox Code Playgroud)