2 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊
修復(fù)你的縮進(jìn)。目前save和clean方法不是 UserForm 類的一部分。它應(yīng)該看起來更像這樣:
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
整個(gè)clean方法也應(yīng)該是縮進(jìn)的,所以它是UserForm頂層的一部分而不是頂層。

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊
if您clean_mail方法中的語句缺少冒號(hào)。
def clean_email(self):
if self.cleaned_data['email'].endswith('@gmail.com'):
...
同樣在你的save方法中,你必須有參數(shù)commit。如果有任何東西覆蓋了你的表單,或者想要修改它正在保存的內(nèi)容,它會(huì)做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
你可以閱讀更多關(guān)于save method
這里
添加回答
舉報(bào)