3

我想使用abstractuser. 我不想要任何特别的东西,只需要稍后在需要时添加自定义字段的能力。

我从文档中了解到我需要:

  • 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从头开始。我的表格有问题,也许管理员也有问题。

4

1 回答 1

4

请参阅有关重写用户模型的 Django 文档:引用用户模型

但是,如果您的用户模型扩展了 AbstractBaseUser,您将需要定义一个自定义 ModelAdmin 类。

在 admin.py 中,您应该从 django.contrib.auth 获取用户模型:

管理员.py:

from django.contrib.auth import get_user_model

Class MyCustomModelAdmin...

CustomUser = get_user_model()

admin.site.register(CustomUser, MyCustomModelAdmin)

编辑:我认为问题可能与您对 UserCreationForm 的使用有关。

我的forms.py:

from django import forms
from .models import CustomUser

class CustomUserCreationForm(UserCreationForm):

class Meta:
    model = CustomUser
    fields = [list fields here]
于 2017-12-21T15:01:58.980 回答