用户注册时如何使 Django 用户电子邮件独一无二?
表单.py
class SignUpForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ("username", "email", "password1", "password2")
def save(self, commit=True):
user = super(SignUpForm, self).save(commit=False)
user.email = self.cleaned_data["email"]
if commit:
user.save()
return user
我正在使用来自 django.contrib.auth.models 的用户。我是否需要覆盖模型中的用户?目前该模型没有引用用户。
视图.py
class SignUp(generic.CreateView):
form_class = SignUpForm
success_url = reverse_lazy('login')
template_name = 'signup.html'
原文由 mogoli 发布,翻译遵循 CC BY-SA 4.0 许可协议
最好的答案是使用
CustomUser
通过子类化AbstractUser
并将唯一的电子邮件地址放在那里。例如:并使用
AUTH_USER_MODEL="app.CustomUser"
更新设置。但是,如果您没有必要将唯一的电子邮件存储在数据库中,或者可能不将其用作用户名字段,那么您可以更新表单的
clean
方法来进行验证。例如:更新
如果您在项目中期,那么您可以按照有关如何更改迁移的 文档 进行操作,简而言之就是:
__init__.py
除外)django_migrations
python manage.py makemigrations
python manage.py migrate --fake
db_table
,对自定义模型进行其他更改,生成迁移,应用它们但是,如果您刚刚开始,请删除迁移目录中除
__init__.py
之外的数据库和迁移文件。然后创建一个新的数据库,通过 --- 创建一组新的迁移,并通过python manage.py migrate
python manage.py makemigrations
应用迁移。对于其他模型中的引用,您可以将它们引用到
settings.AUTH_USER_MODEL
以避免任何未来的问题。例如:它会自动引用当前的用户模型。