使用自定义用户模型

时间:2017-12-20 21:28:27

标签: django django-custom-user

我想使用abstractuser为Django自定义用户模型创建一个注册表单。我不想要任何特别的东西,只是稍后需要添加自定义字段的能力。

我从the docs了解到我需要:

  • 设置AUTH_USER_MODEL
  • 通过继承AbstractUser
  • 来定义自定义用户模型
  • 通过继承UserManager
  • 来定义自定义模型管理器
  • 子类UserCreationFormUserChangeForm

这是我目前的代码:

我的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。我的表单和管理员也有问题。

1 个答案:

答案 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