我想使用abstractuser
为Django自定义用户模型创建一个注册表单。我不想要任何特别的东西,只是稍后需要添加自定义字段的能力。
我从the docs了解到我需要:
AUTH_USER_MODEL
AbstractUser
UserManager
UserCreationForm
和UserChangeForm
这是我目前的代码:
我的settings.py
:
AUTH_USER_MODEL = 'users.CustomUser'
我的models.py
:
from django.contrib.auth.models import AbstractUser, UserManager
class CustomUserManager(UserManager):
pass
class CustomUser(AbstractUser):
objects = CustomUserManager()
我的forms.py
:
from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser
class CustomUserCreationForm(UserCreationForm):
class Meta(UserCreationForm.Meta):
model = CustomUser
fields = UserCreationForm.Meta.fields
class CustomUserChangeForm(UserChangeForm):
class Meta:
model = CustomUser
fields = UserChangeForm.Meta.fields
我的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):
model = CustomUser
add_form = CustomUserCreationForm
form = CustomUserChangeForm
admin.site.register(CustomUser, CustomUserAdmin)
我的views.py
:
from django.urls import reverse_lazy
from django.views import generic
from .forms import CustomUserCreationForm
class SignUp(generic.CreateView):
form_class = CustomUserCreationForm
success_url = reverse_lazy('login')
template_name = 'signup.html'
提交注册表单后会收到错误消息:
OperationalError at /users/signup/
no such table: users_customuser
我已经确定了我的数据库,并从头开始makemigrations
然后migrate
。我的表单和管理员也有问题。
答案 0 :(得分:3)
请参阅有关重写用户模型的Django文档:Referencing the User Model
但是,如果您的用户模型扩展了AbstractBaseUser,则需要定义自定义的ModelAdmin类。
在admin.py中,您应该从django.contrib.auth获取用户模型:
admin.py:
from django import forms
from .models import CustomUser
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = CustomUser
fields = [list fields here]
编辑:我认为问题可能出在您使用UserCreationForm上。
我的forms.py:
private