解决方案 1
或者 aumo 的答案,假设您使用的是 jQuery,您实际上可能想要使用.serializeArray()
而不是.serialize()
, 来生成一个 JSON 对象,然后您可以使用 JSON.stringify和 POST。
data = {
form : $(this).serializeArray(),
some_array: [2,3,4,1]
};
$.ajax(url, {
data: JSON.stringify(data),
contentType: 'application/json',
type: 'POST',
});
正如您在评论中指出的那样,serializeArray
JSON 输出的格式不容易被 Django 表单使用,并且需要在通过json.load
.
data = json.load(request)
value = data['some_array']
form_data = {}
for f in data['form']:
if f not in form_data:
form_data[f['name']] = f['value']
elif not isinstance(form_data[f['name']], list):
form_data[f['name']] = [form_data[f['name']], f['value']]
else:
form_data[f['name']].append(f['value'])
form = MyForm(data=form_data)
解决方案 2
在再次查看代码之后,在前端将表单数据序列化为正确的 json 格式可能会更好(并且为了未来的安全性更通用)。
尽管对此有很多解决方案;我最好的选择是使用久经考验/流行的库,例如jquery-serialize-object,代码更改会很小:
<script src="jquery.serialize-object.min.js"></script>
<script>
data = {
form : $(this).serializeObject(),
some_array: [2,3,4,1]
};
$.ajax(url, {
data : JSON.stringify(data),
contentType : 'application/json',
type : 'POST',
});
</script>
然后服务器代码会简单得多
data = json.load(request)
value = data['some_array']
form = MyForm(data=data['form'])