我正在尝试将字符串化的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']
基本上,我有两个大问题:
json.loads(request.body)
和for循环仍然有效,Django语法my_form = MyForm(request.POST)
仍然有效甚至不知道什么时候开始。我已经检查了this,但我感觉$m_form + json_str
不是正确的方法。请帮帮我!
答案 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'])