2016-06-02 8 views
0

にform.serializeと文字列化されたJSONオブジェクトを組み合わせる:アヤックス+ジャンゴ - "データ" パラメータ私はこのようなDjangoのビューに文字列化、JSONパラメータと直列化形式に合格しようとしています

JS:

var selected_items = legalEntitiesVendorAgreements_selectize.items; 
var data = $form.serializeArray(); 
for (var i = 0; i < selected_items.length; ++i) 
{   
    data.push({'legal_entity_own_id' : selected_items[i]}); 
} 

を表示:

    01:

    def my_view (request): 
    list_data = json.loads(request.body) 
    for x in list_data: 
        // Do smth with x['some_predefined_field'] 
    

    は基本的に、私はここでは2つの大きな疑問を持っています

  1. データパラメータに$ m_formとjson_strを組み合わせるには
  2. リクエストパラメータの解析において、私のDjangoビューコードがどのように変化しますか?具体的には、json.loads(request.body)サイクルのためにまだ働くことになり、有効な

ことから開始する場合にもわかりません。まだ構文my_form = MyForm(request.POST)をジャンゴます私はthisを調べましたが、$m_form + json_strが正しい方法ではないという悪い気持ちがあります。お願い助けて!

+1

http://stackoverflow.com/questions/6627936/jquery-post-with-serialize-and- extra-data/6627995 –

答えて

1

フォームデータとJSONをここで混在させようとしています。 1つを選択し、もう一方をその形式に変換する必要があります。

form_data = $m_form.serializeArray(); 
json_obj["form_data"] = form_data; 
json_str = JSON.stringify(json_obj); 

を、今、あなたのDjangoのビューはlist_data["form_data"]経由で非直列化されたフォームデータにアクセスすることができます。

たとえば、あなたは、シリアル化の前に、OBJにフォームデータを追加することができます。

それとも、あなたはそのフォーム内の値とJSONで、標準的な方法でフォームを投稿することができます:

form_data = $m_form.serialize(); 
form_data["json_data"] = json_obj; 
$.post(url, form_data); 

今すぐあなたのDjangoのビューには、標準POST辞書を取得します、あなたはのほとんどをアクセスすることができますその要素は正常ですが、json_data要素を特異的に非直列化します。

form = MyForm(request.POST) 
json_data = json.loads(request.POST["json_data"]) 

(このフォームでは、追加のフィールドは無視されます)。

+0

Daniel、2番目のアプローチでは、form_data = $ m_form.serializeArray()を意味するかもしれません。 form_data.push ["json_data"] = json_obj? –

+0

ダニエル、私の質問の更新2を見てください。フォーム= MyForm(request.POST)は正常に動作しますが、json.loads( "request.POST [" json_data "])は#MultiValueDictKeyErrorを発生させます:" 'json_data' " –

+0

何とか2つの引用符があるようです。 –

0

最後に私はそれを働かせました。私の解決策を共有したいと思います:

jqueryの:

json_obj = []; 

for (var i = 0; i < selected_items.length; ++i) 
{   
    json_obj.push({'legal_entity_own_id' : selected_items[i]}); 
} 

var data = $form.serialize() + '&json_data=' + JSON.stringify(json_obj); 
$.post ('/create_vendor_agreement/' + vendor_id + '/', data); 

ビュー:

my_django_form = MyDjangoForm(request.POST) # As usual 
list_data = json.loads(request.POST['json_data']) 
for x in list_data: 
    do_something_with(x['legal_entity_own_id']) 
関連する問題