Django表单中的字段顺序

时间:2015-07-28 12:04:28

标签: python django forms

我正在使用Django在服务器端执行一些脚本,我正在使用表单来获取参数。

我按照我需要这些参数的顺序定义表单,然后按顺序呈现它。问题在于,当我提交表单时,它会在没有该顺序的情况下发送,因此脚本执行如下操作:

./ script parameter3 parameter1 parameter2

而不是

./ script parameter1 parameter2 parameter3

每个表单都有不同的字段,我只有一个方法来执行它们。所以我采取除csrftoken之外的所有字段,所以这样:

for arg in request.POST:
 args.append(request.POST.get(arg))

然后使用

执行
command.extend(args)

我尝试使用

在forms.py中定义顺序
 self.fields.keyOrder = ['parameter1','parameter2','parameter3']

但我认为它只适用于渲染时的排序。无论如何都要控制提交发送数据的顺序吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

If you want to maintain the order of fields, don't use form to post data.

Consider posting JSON with AJAX, and puting the fields in a list:

// You can compose such a JSON string by extracting the fields with jQuery
var field1_obj = {
  name:"field1",
  value: $("#field1").value()
}
var field2_obj = {
  name:"field2",
  value: $("#field2").value()
}
var payload = {data:[field1_obj, field2_obj]}
var payload_json = JSON.stringify(payload)
// JSON string
{data: [{name: "field1", value:"val1"}, {name: "field1", value:"val1"}]}
// Post it to server
$.post(url, payload_json ...)

On server side, it is pretty trivial to load the json string into a python dictionary:

import json
form = json.loads(request.body)