Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django表单验证字段相互存储,并独立验证其中一个字段_Django_Django Forms - Fatal编程技术网

django表单验证字段相互存储,并独立验证其中一个字段

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,

我正在学习表单验证,如果我想在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,
        }
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