2 回答
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顶层的一部分而不是顶层。
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
这里
添加回答
举报