【发布时间】:2020-05-16 15:38:52
【问题描述】:
我使用AbstractBaseUser, BaseUserManager 制作了一个自定义用户模型,并使用该模型制作了一个注册表单。但是每当我尝试加载注册表单时,它都会给我一个错误。我的应用名称是糖尿病。我在settings.py中添加了应用程序安装应用程序,还添加了AUTH_USER_MODEL='diabetes.UserSignupModel'。我可以手动在数据库中添加数据。
models.py
from django.db import models
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
class SignUpManager(BaseUserManager):
def create_user(self, email, username, age, name, password=None):
if not email:
raise ValueError("insert user")
if not username:
raise ValueError("insert username")
if not name:
raise ValueError("insert name")
if not age:
raise ValueError("insert age")
user = self.model(
email=self.normalize_email(email),
username=username,
age=age,
name=name,
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, username, age, name, password):
user = self.create_user(
email=self.normalize_email(email),
username=username,
password=password,
age=age,
name=name,
)
user.is_admin = True
user.is_staff = True
user.is_superuser = True
user.save(using=self._db)
return user
class UserSignupModel(AbstractBaseUser):
email = models.EmailField(verbose_name="email", max_length=60, unique=True)
age = models.CharField(max_length=15)
name = models.CharField(max_length=15)
username = models.CharField(max_length=15, unique=True)
date_joined = models.DateTimeField(verbose_name="date joined", auto_now_add=True)
last_login = models.DateTimeField(verbose_name="last login", auto_now=True)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
USERNAME_FIELD = "username"
REQUIRED_FIELDS = ["email", "name", "age"]
objects = SignUpManager()
def __str__(self):
return self.email
def has_perm(self, perm, obj=None):
return self.is_admin
def has_module_perms(self, app_label):
return True
#migrate --run-syncdb in case no work
admin.py
from django.contrib import admin
# Register your models here.
from diabetes.models import UserSignupModel
admin.site.register(UserSignupModel)
forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from diabetes.models import UserSignupModel
class UserSignupForm(UserCreationForm):
email=forms.EmailField(max_length=50,help_text="add a valid email address")
name=forms.CharField(max_length=50,help_text="add a valid name")
age=forms.IntegerField()
class meta:
model=UserSignupModel
fields=("email","username","name","age","password1","password2")
【问题讨论】:
-
您是否在创建新的用户模型之前迁移了您的项目?
-
不确定!