django表单验证字段相互存储,并独立验证其中一个字段
我正在学习表单验证,如果我想在clean方法中同时验证name和money,似乎会出现很多错误,例如AttributeError、KeyError e、 g: 我的文件: forms.py:django表单验证字段相互存储,并独立验证其中一个字段,django,django-forms,Django,Django Forms,我正在学习表单验证,如果我想在clean方法中同时验证name和money,似乎会出现很多错误,例如AttributeError、KeyError e、 g: 我的文件: forms.py: from django import forms from django.core.exceptions import ValidationError money_db = { 'Tom': 100, 'Jack': 200, 'Lucy': 300,
from django import forms
from django.core.exceptions import ValidationError
money_db = {
'Tom': 100,
'Jack': 200,
'Lucy': 300,
}
class ValidationForm(forms.Form):
name = forms.CharField(required=True)
money = forms.FloatField(required=True)
def clean_name(self):
name = self.cleaned_data.get('name').strip()
if not name in ['Tom', 'Jack', 'Lucy']:
raise ValidationError('No such person!')
return name
def clean(self):
cleaned_data = self.cleaned_data
name = cleaned_data.get('name').strip() # AttributeError here
money = cleaned_data.get('money')
if money > money_db[name]:
raise ValidationError("You don't have so much money!")
return cleaned_data
views.py:
from django.shortcuts import render_to_response
from django.template import RequestContext
from forms import ValidationForm
def form_validate(request, template='learn/form_validate.html'):
form = ValidationForm()
if request.GET:
form = ValidationForm(request.GET)
if form.is_valid():
pass
context = RequestContext(request,{
'form': form,
})
return render_to_response(template, context)
html:
{%load staticfiles%}
{{form.errors}}
名称:{{form.Name}
货币:{{form.Money}}
您的clean_name
函数只返回name
,因此出现关键错误。您必须返回所有已清理的数据。查看此处看起来您在请求中不会获得任何数据。获取
使用请求。发布
。
from django.shortcuts import render_to_response
from django.template import RequestContext
from forms import ValidationForm
def form_validate(request, template='learn/form_validate.html'):
form = ValidationForm()
if request.GET:
form = ValidationForm(request.GET)
if form.is_valid():
pass
context = RequestContext(request,{
'form': form,
})
return render_to_response(template, context)
{% load staticfiles %}
<html>
<body>
<form action="">
<div>{{form.errors}}</div>
<div>Name: {{form.name}}</div>
<div>Money: {{form.money}}</div>
<input type="submit" value="Submit" />
</form>
</body>
</html>
def clean(self):
cleaned_data = self.cleaned_data
name = cleaned_data.get('name') # if name is invalid, it is None
money = cleaned_data.get('money') # if money is invalid, it is None
if name and money: # make sure they are valid
if money > money_db[name]:
raise ValidationError("You don't have so much money!")
return cleaned_data