Ajax + Django - 在“data”参数中组合form.serialize和stringified JSON对象

时间:2016-06-02 08:18:16

标签: javascript jquery json django

我正在尝试将字符串化的json参数和序列化表单传递到Django视图中,如下所示:

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]});
}

查看:

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

基本上,我有两个大问题:

  1. 如何在数据参数
  2. 中组合$ m_form和json_str
  3. 我的Django视图代码在解析请求参数的过程中如何变化。具体来说,json.loads(request.body)和for循环仍然有效,Django语法my_form = MyForm(request.POST)仍然有效
  4. 甚至不知道什么时候开始。我已经检查了this,但我感觉$m_form + json_str不是正确的方法。请帮帮我!

2 个答案:

答案 0 :(得分:1)

您正在尝试在此处混合和匹配表单数据和JSON。您需要选择一个,并将另一个转换为该格式。

例如,您可以在序列化之前将表单数据添加到obj中:

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

现在您的Django视图可以通过list_data["form_data"]访问反序列化的表单数据。

或者,您可以使用标准方式发布表单,并将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"])

(表格应该忽略附加字段)。

答案 1 :(得分: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'])