0

私のテンプレートには、GET 呼び出しを Django メソッドに送信する JavaScript があります。このメソッドでは、空白のフォームをテンプレートに戻したいと思います。これが私のJavaScriptです:

require(["dojo/request/xhr", "dojo/domReady!"],
    function(xhr, ready){
        var url = window.location.pathname + "dev/" + report_id + "/" + report_url + "/";
        xhr(url, {
            method: "get"
        }).then(
            function(response){
                var json_response = JSON.parse(response);
                //do stuff
            }
        );
    });

これが私のDjangoビューで起こっていることです:

def my_view(request):
    if request.method == "GET":
        form = MyForm()
        data = json.dumps({
            'form': form,
        })

        return HttpResponse(data, mimetype="application/json")
    else:
        #do other stuff

これが私が今得ているエラーです:

raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <development.dev_forms.MyForm object at 0x7f3a8dd07e50> is not JSON serializable

Djangoフォームをシリアル化できないようです。というわけで、このフォームのフィールドをどうにかしてテンプレートに戻したいと思います。これを行うには、他にどのような方法がありますか? すべてのフィールドの HTML を取得する方法はありますか? それから私は自分で辞書を作ることができました。他の提案はありますか?ありがとう!

4

2 に答える 2

1

最初にフォームをレンダリングしてから、それを ajax 呼び出しに戻す必要があります。

ctx = {'form': MyForm()}

data = {
    "form": render_to_string("app/form_template.html", ctx, context_instance=RequestContext(request))
        }
return HttpResponse(json.dumps(data), mimetype="application/json")

次に、ajax 呼び出しの関数で使用json_response.formしてフォームを取得します。success

于 2013-08-23T18:09:10.230 に答える