我判断了几个相关的问题,但不确定如何解决在try 使用注册表单的自定义用户模型时出现的错误.

Error:个 错误配置:AUTH_USER_MODEL引用了尚未安装的模型‘Users.User’

register.html

  <form action="" method="POST">
     {% csrf_token %} 
     
     {{form.as_p}}

    <button type="submit">Submit</button>
   </form>

views.py:

from django.contrib.auth.forms import UserCreationForm
from .models import Users
from .forms import UsersForm

def registerPage(request):
    form = UserCreationForm()

    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
    context = {'form': form}
    return render(request, 'base/register.html', context)
  

models.py:

from django.db import models
from .manager import MyUserManager
from django.contrib.auth.models import AbstractBaseUser
from django.utils import timezone

from django.contrib.auth import get_user_model
User = get_user_model()

class User(AbstractBaseUser):
    email = models.EmailField(max_length=255,unique=True,)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_admin = models.BooleanField(default=False)
    date_joined = models.DateTimeField(default=timezone.now)

    objects = MyUserManager() 

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    def __str__(self):
        return self.email

    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self, app_label):
        return True

    @property
    def is_staff(self):
        return self.is_admin

setting.py:

INSTALLED_APPS = [

    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'products.apps.ProductsConfig',
    'pages.apps.PagesConfig',
    'services.apps.ServicesConfig',
    'users'
]

AUTH_USER_MODEL = 'users.User'

forms.py:

type hfrom django import forms
from django.core.exceptions import ValidationError
from .models import User

class UserCreationForm(forms.ModelForm):
    password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Enter Password Again', widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ('email',)

    def clean_password2(self):
        # Check that the two password entries match

        password1 = self.cleaned_data.get("password1")
        password2 = self.cleaned_data.get("password2")
        if password1 and password2 and password1 != password2:
            raise ValidationError("Passwords don't match")
        return password2

    def save(self, commit=True):
        # Save the provided password in hashed format
        user = super().save(commit=False)
        user.set_password(self.cleaned_data["password1"])
        if commit:
            user.save()
        return userere

admin.py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .forms import UserCreationForm
from .models import User

from django.contrib.auth import get_user_model
User = get_user_model()
 
class CustomUserAdmin(UserAdmin):
   add_form = UserCreationForm
  
   list_display = ('email', 'is_admin')
   list_filter = ('is_admin',)
   fieldsets = (
       (None, {'fields': ('email', 'password')}),
       ('Permissions', {'fields': ('is_admin',)}),
   )
   add_fieldsets = (
       (None, {
           'classes': ('wide',),
           'fields': ('email','password1', 'password2'),
       }),
   )
   ordering = ('email',)
   filter_horizontal = ()
 
 
# Now register the new UserAdmin...
admin.site.register(User, CustomUserAdmin)

manager.py

from django.contrib.auth.models import BaseUserManager
from django.contrib.auth import get_user_model
User = get_user_model()

class MyUserManager(BaseUserManager):
    
   def create_user(self, email,password=None):
       if not email:
           raise ValueError('Email must be provided')
 
       user = self.model(email=self.normalize_email(email))
       user.set_password(password)
       user.save(using=self._db)
       return user

   def create_superuser(self, email,password, **kwargs):
       user = self.create_user(email,password=password)
       user.is_admin = True
       user.save(using=self._db)
       return user   

推荐答案

呼叫get_user() before定义User型号是没有意义的:

# from django.contrib.auth import get_user_model
# User = get_user_model()

class User(AbstractBaseUser):
    # …

这只会try 获取用户模型…在它被定义之前,因此产生了错误.

Django相关问答推荐

Django项目陷入登录页面

构造一个定制字符串(实体、年份和字母数字的组合)作为Django中的Postgres数据库的主键是否明智?

Django ORM多表一对多关系问题

Django modelform在包含在另一个模板中时不呈现

django优化查询

Django为什么我的post.count_view递增2?

当使用django-tinymce时,我在哪里指定referer?

通过父模型查询子对象-Django

Django:创建一个动态侧边栏模板并在其他模板中使用它

如何重命名标准 django-registration 模板的名称

Django:使用相同的外键在不同的应用程序中 Select 多个列

如何使用 matplotlib 在绘图的角落插入小图像?

Python 和 Django OperationalError (2006, 'MySQL server has gone away')

如何在 Django 中向 ModelForm 添加外键字段?

Django:创建索引:非唯一,多列

Django 国际化语言代码

获取 django 应用的绝对路径

如何重置 PostgreSQL 表上的 ID 序列

django-rest-framework 接受 JSON 数据?

Django:在模块中实现 status字段的最佳方式