I want to create a signup form for a Django custom user model using abstractuser
. I don't want anything special, just the ability to later on add custom fields if needed.
I understand from the docs that I need to:
- set
AUTH_USER_MODEL
- define a custom user model by subclassing
AbstractUser
- define a custom model manager by subclassing
UserManager
- subclass
UserCreationForm
andUserChangeForm
Here's my current code:
My settings.py
:
AUTH_USER_MODEL = 'users.CustomUser'
My models.py
:
from django.contrib.auth.models import AbstractUser, UserManager
class CustomUserManager(UserManager):
pass
class CustomUser(AbstractUser):
objects = CustomUserManager()
My 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
My 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)
My 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'
Upon submission of the signup form get the error message:
OperationalError at /users/signup/
no such table: users_customuser
I've nuked my database and done makemigrations
and then migrate
from scratch. Something is wrong with my form and perhaps admin, too.