我想在我的Django表单上创建验证方法。这样,我可以轻松地通过Form实例进行验证
class SignupForm(forms.Form):
username = forms.CharField(label='username', max_length=255)
password1 = forms.CharField(label='password', max_length=255, widget=forms.PasswordInput())
password2 = forms.CharField(label='retype password', max_length=255, widget=forms.PasswordInput())
def validate_password(self):
if self.password1 == self.password2:
return True
else:
return False
def save(self):
Account.objects.create(
username=self.username,
password=self.password1
)
print('${self.username} has been added!')
这样我就可以在视图上使用表单了
post = request.POST
form = SignupForm()
if Account.objects.filter(username=post['username']).count() > 0:
messages.warning(request, "account with the same username is already exists!")
print("account saved")
else:
if form.validate_password():
form.save()
messages.success(request, "Account has been added")
else:
messages.warning(request, "passwords don't match! {} {}".format(post["password1"], post["password2"]))
return redirect("signup")
我在CLI中遇到这样的错误
AttributeError: 'SignupForm' object has no attribute 'password1' [18/Aug/2020 16:10:10] "POST /accounts/signup HTTP/1.1" 500 74586
我认为它是指if self.password1 == self.password2:
行
我对Django响应的错误 django error site
但是似乎我收到一个错误,即表单没有创建模型时分配的属性。有没有办法可以在form方法中访问对象实例的属性?这是我的第一个python项目,所以我还没有掌握该语言。
操作系统:Windows 10 的Django:3.1 python:3.7.4
答案 0 :(得分:0)
我已经解决了。我犯了一个错误,没有在行form = SignupForm()
中填充SignupForm()表单。所以我要做的就是在我的视图中通过form = SignupForm(post)
对其进行分配。
而且我可以通过调用表单实例方法中的self.data['username']
而不是self.username
来访问form属性。
答案是使用self.data
访问表单的实例字段,而不是直接将其称为Django的字段