0

フォームバリデーションを学んでいるのですが、クリーンメソッドでnameとmoneyを同時にバリデーションしようとすると、AttributeError、KeyErrorなどのエラーが多いようです。

例えば:

AttributeError at /learn/form_validate/
'NoneType' object has no attribute 'strip'

私のファイル:

フォーム.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

ビュー.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 %}
<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>
4

2 に答える 2

0

あなたの関数はキーエラーをclean_name返すだけです。nameクリーニングされたデータ全体を返す必要があります。こちらをご覧ください https://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-a-specific-field-attribute

于 2013-09-16T09:28:49.413 に答える