0

私は単純なフォームとビューを持っており、次のような基本的なことを行っています。

from annoying.decorators import ajax_request

@require_POST
@login_required
@ajax_request
def my_view(request):
    form = MyForm(request.POST)
    if form.is_valid():
        form.save(request.user)
        return {"ok": True}
    return {"ok": False, "errors": form.errors}

forms.py:

class MyForm(forms.Form):
    name = forms.CharField(max_length=250)

    def clean_name(self):
        cleaned_data = self.cleaned_data

        name = cleaned_data.get('name', '')
        if MyModel.objects.filter(name__iexact=name).exists():
            raise forms.ValidationError(_(u"This already exists."))
        return cleaned_data

    def save(self, user):
        obj, created = MyModel.objects.get_or_create(name=self.cleaned_data["name"], user=user)
        return obj

しかし、メソッドでself.cleaned_dataを取得する際に問題がありform.saveます。私のMyForm.clean_nameself.cleaned_dataはかっこいいです。

しかし、form.saveレベルでは、self.cleaned_data = {'name':{...}}self.cleaned_data['name']についても同じです。それを待つ..だけでなく、self.cleaned_data ['name'] ['name'] ['name'] ['name'] ['name'] ... ['name'] ['name']

type(self.cleaned_data)とそのキーはdict

何が私のコードをそのように振る舞わせることができますか?

4

1 に答える 1

5

あなたの問題は、辞書clean_<fieldname>全体ではなく、きれいな値を返す必要があることです:cleaned_data

def clean_name(self):
    cleaned_data = self.cleaned_data

    name = cleaned_data.get('name', '')
    if MyModel.objects.filter(name__iexact=name).exists():
        raise forms.ValidationError(_(u"This already exists."))
    return name
于 2012-10-29T17:32:55.890 に答える