没有更好的想法,可以从一个集合中挑选项目并指定你想要的顺序,我正在玩Django Admin的FilteredSelectMultiple小部件。
在我看来,当我收到表单提交时,我转储了request.POST和各种form.cleaned_data字段并发现了以下内容:
<QueryDict: {
u'conditions': [u'2', u'1'], <-- this is the actual order I specified
...
}>
[<Condition: cond1>, <Condition: cond2>] <-- cleaned conditions
[07/Mar/2016 12:41:04] "POST /test_app/site/1/bulk_add_participants HTTP/1.1" 302 0
在response.POST的QueryDict中,条件的顺序是正确的:[2,1],但是当清理时,它们被排序为[1,2](我知道cond1的事实) .id = 1和cond2.id = 2),
我用于FilteredSelectMultiple的查询集按名称对它们进行排序,但我没想到clean_data会按这种方式排序。也许这就是正在发生的事情。
我假设只要我知道form.valid()
成功,只要QueryDict正确,我实际上并不需要清理的值。我需要的只是我选择的顺序中的ID。
当我点击提交时,是否有人知道request.POST中的商品的原始订单保证与右框中的商品的顺序相同?如果没有,是否有人知道Django小部件更适合我的需求?
顺便说一句,对于那些好奇的人,我正在制作批量创作表格。我需要允许用户为实验创建参与者1-1000,并且当我创建参与者时,我将按照他们指定的顺序对该实验条件的任何子集进行itertools.cycle()
,将该条件排序映射到新创建的参与者。