为了账号安全,请及时绑定邮箱和手机立即绑定

当登录在 django 上正常工作时,注册表单不起作用

当登录在 django 上正常工作时,注册表单不起作用

Qyouu 2021-06-14 16:21:09
当登录工作正常时,我无法进行 sigupfrom django import formsfrom django.contrib.auth.models import Userfrom django.core.exceptions import ValidationErrorclass UserForm(forms.ModelForm):    password=forms.CharField(widget=forms.PasswordInput)    class Meta:        model=User        fields=['first_name', 'last_name',                'email', 'username',                'password']        label={            'password':'Password'}def clean_email(self):    if self.cleaned_data['email'].endswith('@gmail.com')    return self.cleaned_data['email']    else:        raise ValidationError("error")def save(self):    password=self.cleaned_data.pop('password')    u=super().save()    u.set_password(password)    u.save()    return u项目链接- https://github.com/tsuryaa/my_project/
查看完整描述

2 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

修复你的缩进。目前save和clean方法不是 UserForm 类的一部分。它应该看起来更像这样:


from django import forms

from django.contrib.auth.models import User

from django.core.exceptions import ValidationError


class UserForm(forms.ModelForm):

    password=forms.CharField(widget=forms.PasswordInput)

    class Meta:

        model=User

        fields=['first_name', 'last_name',

                'email', 'username',

                'password']

        label={

            'password':'Password'

            }

    def save(self):

        password=self.cleaned_data.pop('password')

        u=super().save()

        u.set_password(password)

        u.save()

        return u

整个clean方法也应该是缩进的,所以它是UserForm顶层的一部分而不是顶层。


查看完整回答
反对 回复 2021-06-22
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

if您clean_mail方法中的语句缺少冒号。


def clean_email(self):

    if self.cleaned_data['email'].endswith('@gmail.com'):

        ...

同样在你的save方法中,你必须有参数commit。如果有任何东西覆盖了你的表单,或者想要修改它正在保存的内容,它会做save(commit=False),修改输出,然后保存它自己。


def save(self, commit=True):

    password = self.cleaned_data.pop('password')

    u = super(UserForm, self).save(commit=False)

    # do custom stuff here

    u.set_password(password)

    if commit:

        u.save()

    return u

你可以阅读更多关于save method 这里


查看完整回答
反对 回复 2021-06-22
  • 2 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信