0

フォームがis_validにfalseを返す理由がわかりません

フォームを送信するためのajax機能を備えたアカウントというページがあります

アカウントビューとcreateformビューにフォームを渡します

createformビュー:これは私のajaxが処理される場所です

def createrecipe(request):
    print "entering createrecipeview"
    if request.method == 'POST':
        print "form is a post"
        form = RecipeForm(request.POST)
        print form.errors
        if form.is_valid():
            print "form is valid"
            form = RecipeForm(initial = {'original_cookbook' : request.user.cookbooks.all()[0]})
            form = form.save()
            if form.cleaned_data['reset_recipe'] == "True":
                print "reset recipe"
                form = RecipeForm(initial = {"original_cookbook": request.user.cookbooks.all()[0]})
                t = loader.get_template('cookbook/create_form.html')
                c = RequestContext(request, {
                'form': form,
                })

                data = {
                'replace': True,
                'form': t.render(c),
                'success': False,
                }

                json = simplejson.dumps(data)
                return HttpResponse(json,mimetype='text/plain')
            t = loader.get_template('cookbook/create_form.html')
            c = RequestContext(request, {
            'form': form,
            })

            data = {
            'replace': True,
            'form': t.render(c),
            'success': True,
            }

            json = simplejson.dumps(data)
            return HttpResponse(json, mimetype='text/plain')
        else:
            print "form is invalid"
            form = RecipeForm(request.POST)
            t = loader.get_template('cookbook/create_form.html')
            c = RequestContext(request, {
                'form':form,
            })

            data ={
                'form': t.render(c),
                'success': False,
            }

            json = simplejson.dumps(data)
            return HttpResponse(json, mimetype='text/plain')

アカウントビュー:これは、ajaxビューのフォームを渡す場所です。

def account(request):
    user = request.user
    if request.user.is_authenticated():
        cookbooks = user.cookbooks
        if cookbooks.all().exists():
            cookbook = cookbooks.all()[0]
            form = RecipeForm(request.POST)
            recipe_list = cookbook.recipes.all()
        else:
            raise Http404
    else:
        return HttpResponseRedirect('/accounts/login')
    t = loader.get_template('cookbook/account.html')
    c = RequestContext(request, {
        'form': form,
        'recipe_list': recipe_list
    })
    return HttpResponse(t.render(c))

だから私の質問は、djangoでajaxを使用するときに、ajaxjsがあるページまたはフォームがあるページにフォームを渡す必要があるのはいつですか?

これが混乱している場合は申し訳ありません-それが意味をなさない場合は教えてください、そして私は詳しく説明します

これが私のform.errorsprintです

<ul class="errorlist"><li>name<ul class="errorlist"><li>This field is required.</li></ul></li><li>ingredients<ul class="errorlist"><li>This field cannot be null.</li></ul></li><li>author<ul class="errorlist"><li>This field is required.</li></ul></li><li>steps<ul class="errorlist"><li>This field cannot be null.</li></ul></li><li>prep_time<ul class="errorlist"><li>This field is required.</li></ul></li><li>type<ul class="errorlist"><li>This field is required.</li></ul></li></ul>

検証していないフォームに入力を追加していないので、これは実際には理にかなっています

申し訳ありませんが、これは誤報だったと思います

これが私のjsです

<script type="text/javascript"> 
$(document).ready(function(){
    var form = $('form#createrecipeform');
    form.submit(function(e) {
    e.preventDefault();
    console.log('ajax form submission function called successfully.');
    form = $(this);
    console.log(form)
    var serialized_form = form.serialize();
        $.ajax({ type: "POST", 
            url: $(this).attr('action'),
            data: serialized_form, 
            success: (function(data) { 
                console.log('ajax success function called successfully.');
                data = $.parseJSON(data);
                if (data.success) {
                    console.log('success');//i dont know what to do here
                    var newForm = data.form;
                    form.replaceWith(newForm);
                } else {
                    console.log('failure');// i also don't know what to do here
                    var newForm = data.form;
                    form.replaceWith(newForm);  
                }
            })
        });
        return false;
    });
});
</script> 

ケイティ

4

1 に答える 1

0

null 以外のすべてのフィールドを送信しているかどうかを確認します。間違ったプロパティ名でデータを送信したり、必須フィールドが欠落している場合があります。何が起こっているかを確認するには、シェルを使用してデータを入力し、フォームのエラー リストにアクセスすることをお勧めします。それをするために

$python manage.py shell 
>>> from yourapp.models import yourClass 
>>> data = {'name':'Jefrey','age':27,'home':'NYC'}
>>> f = yourClass(data)
>>> f.is_valid()

False を取得した場合は、これを行います

>>>f.errors

そうすれば、何が起こっているかがわかります。詳細については、Django ドキュメント https://docs.djangoproject.com/en/dev/ref/forms/api/を参照してください。

これが役立つことを願っています

于 2012-05-14T15:08:09.180 に答える