我试图从旧项目中重复使用代码进行注册表单。问题是Django说UserCreationForm
没有clean_password1
属性。
你知道问题出在哪里吗?我看到UserCreationForm
中没有这样的属性,但它之前有效。
我该怎么做才能让它发挥作用?
编辑:因为它调用超级(...)。clean_password1,它不是超级类。所以我试图把super(...)。更名为clean_data.get(" password1"),但它引发了clean_data不存在的错误(在超类中)。
class UserProfileCreationForm(UserCreationForm):
username = forms.CharField(label="Username", max_length=40, min_length=5)
email = forms.EmailField(label="Email address", max_length=40)
first_name = forms.CharField(label='First name', max_length=40, required=False)
last_name = forms.CharField(label='Last name', max_length=40, required=False)
password1 = forms.CharField(label="Password", widget=forms.PasswordInput, min_length=5)
password2 = forms.CharField(label="Password confirmation", widget=forms.PasswordInput)
class Meta():
model = UserProfile
fields = (
'username', 'email', 'type_of_user', 'first_name', 'last_name', 'password1', 'password2','IBAN',
)
def clean_password1(self):
password = self.cleaned_data.get('password1')
if len(password) < 8:
raise ValidationError('Password has to be of size at least 8 characters')
return super(UserProfileCreationForm, self).clean_password1()
def clean_password2(self):
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
raise forms.ValidationError("Password mismatch")
return password2
def save(self, commit=True):
try:
with transaction.atomic():
user = User(username=self.cleaned_data['username'],
first_name=self.cleaned_data['first_name'],
last_name=self.cleaned_data['last_name'],
email=self.cleaned_data['email'])
user.save()
user.set_password(self.cleaned_data["password1"])
user_profile = UserProfile(user=user,
IBAN=self.cleaned_data['IBAN'],
type_of_user=self.cleaned_data['type_of_user']
)
user_profile.save()
except:
raise #TODO: HANDLE THE EXCEPTION
return user
答案 0 :(得分:0)
您可以安全地删除$json = file_get_contents('json.php');
$itemsArray = json_decode($json);
print_r($itemsArray);
- Django已经验证密码是否匹配(我假设您正在使用新项目的当前版本)。至于clean_password2
我建议将其删除并阅读password validation上的文档(Django 1.9中的新内容)。
答案 1 :(得分:0)
没有理由在clean_field方法中调用super
;该字段不存在于基类中,因此clean_field也不存在。