猿问

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

当登录工作正常时,我无法进行 sigup


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 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/


Qyouu
浏览 165回答 2
2回答

慕桂英546537

修复你的缩进。目前save和clean方法不是 UserForm 类的一部分。它应该看起来更像这样:from 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 save(self):        password=self.cleaned_data.pop('password')        u=super().save()        u.set_password(password)        u.save()        return u整个clean方法也应该是缩进的,所以它是UserForm顶层的一部分而不是顶层。

阿波罗的战车

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 这里
随时随地看视频慕课网APP

相关分类

Python
我要回答