Python Django表单排序是倾斜的

Python Django表单排序是倾斜的,python,django,forms,http,post,Python,Django,Forms,Http,Post,我试图使用django表单库创建一个表单,但是当查看由表单填充的模型时,这些值是无序的。没有明显的原因 以下是我的看法: def reoccurring_view(request): if request.method == 'POST': form = ReoccurringForm(request.POST) counter = 0 if form.is_valid(): for key, value in request.POST.iteritems

我试图使用django表单库创建一个表单,但是当查看由表单填充的模型时,这些值是无序的。没有明显的原因

以下是我的看法:

def reoccurring_view(request):
if request.method == 'POST':
    form = ReoccurringForm(request.POST)
    counter = 0
    if form.is_valid():
        for key, value in request.POST.iteritems():
            counter += 1
            if value is not None:
                day = itemize(value, counter)
                add = Reoccurring(day.Day, day.N, day.S, day.E)
                add.save()
else:
    form = ReoccurringForm()
return render(request, 'Reoccurring.html', {'form': form})
这是我的模板:

<form action="" method="post">
        <table>
            {{ form.as_table }}
        </table>
        {% csrf_token %}
        <input class="btn btn-primary" style="float: left;" type="submit" value="Submit">
</form>
这是我的表格课:

class ReoccurringForm(forms.Form):
    monday = forms.CharField(required=False)
    tuesday = forms.CharField(required=False)
    wednesday = forms.CharField(required=False)
    thursday = forms.CharField(required=False)
    friday = forms.CharField(required=False)
    saturday = forms.CharField(required=False)
    sunday = forms.CharField(required=False)
但以下是通过admin生成的填充模型:

1   [u'monday'] [u'06:00 p.m.'] [u'07:30 p.m.']
2   [u'tuesday']    [u'06:00 p.m.'] [u'07:30 p.m.']
3   [u'friday'] [u'06:00 p.m.'] [u'07:30 p.m.']
4   [u'wednesday']  [u'08:30 a.m.'] [u'09:30 a.m.']
5   [u'thursday']   [u'06:00 p.m.'] [u'07:30 p.m.']
6   [u'sunday'] [u'06:00 p.m.'] [u'07:30 p.m.']
7   []  []  []
8   [u'saturday']   [u'06:00 p.m.'] [u'07:30 p.m.']
正如你所看到的……它们的顺序不正确,还有一个不应该出现的额外位置……这是一个错误吗?(编辑:csrf令牌也被传递到dict中,很容易被忽略),但顺序仍然是一个谜

谢谢

编辑:经过进一步的调查,我决定输出dict本身,看看它是否损坏了,但不知道为什么):


但这并没有任何区别……看起来顺序是正确的,但将数据处理到POST dict的过程不知怎么搞砸了,任何洞察都将不胜感激

这是因为
QueryDict
是dict类型,所以它以任意顺序返回其键

最好将字典视为一组无序的键:值 成对的


恐怕你不能依赖Django的POST dict中字段的顺序——它本质上是一本字典,因此没有设置顺序


如果发布数据的顺序很重要,Django会提供
请求。原始发布数据
可以获得该请求。

Python字典是无顺序的。因为Django响应是一个字典,所以它将是一个不可依赖的任意顺序

我尝试了你的解决方案,但它仍然像上面一样给了我一个混乱的查询信息。是的,我正在保存到数据库,但这是间接的。但是这个查询信息是直接从POST数据中获取的,所以我不确定为什么它是不正确的。我试图对字段以及您的解决方案进行显式排序,但我不知所措。谢谢(我可能还是遗漏了一些东西)@user2016117:你使用的是什么版本的django?我使用的是1.5.1,我相信你和其他发帖人误解了我的问题,因为这不是在渲染,而是在生成的帖子数据的顺序上。是的,我低估了dict的“任意性和不可信任性”(;我错了!为什么你编辑了你的答案,这样评论就没有意义了?!当表单呈现时,或者如果你正在转储查询信息,那么这个顺序就不好了?呈现的表单一直都是正确的,就像在原始问题中一样,我指定并指出了呈现的顺序是正确的。只是后期转储是错误的。我担心这一点,我说假设我只是希望6个值可以通过请求神奇地保持有序d:您的答案非常完整,但作为其他阅读本文的人的旁白,request.raw_post_data是deprec并被request.body替换。但是您是正确的,并且已被标记为正确的。谢谢!如果还有其他方法获得有序的dict的话让我知道!
1   [u'monday'] [u'06:00 p.m.'] [u'07:30 p.m.']
2   [u'tuesday']    [u'06:00 p.m.'] [u'07:30 p.m.']
3   [u'friday'] [u'06:00 p.m.'] [u'07:30 p.m.']
4   [u'wednesday']  [u'08:30 a.m.'] [u'09:30 a.m.']
5   [u'thursday']   [u'06:00 p.m.'] [u'07:30 p.m.']
6   [u'sunday'] [u'06:00 p.m.'] [u'07:30 p.m.']
7   []  []  []
8   [u'saturday']   [u'06:00 p.m.'] [u'07:30 p.m.']
> <QueryDict: {u'monday': [u'monday, 06:00 p.m. to 07:30 p.m.'],
> u'tuesday': [u'tuesday, 06:00 p.m. to 07:30 p.m.'], u'friday':
> [u'friday, 06:00 p.m. to 07:30 p.m.'], u'wednesday': [u''],
> u'thursday': [u'thursday, 06:00 p.m. to 07:30 p.m.'], u'sunday':
> [u'sunday, 06:00 p.m. to 07:30 p.m.'], u'csrfmiddlewaretoken':
> [u'AcxRjdNeTFwij7vwtdplZPy2SRlwrnzl'], u'saturday': [u'saturday, 06:00
> p.m. to 07:30 p.m.']}>
def __init__(self, *args, **kwargs):
        super(ReoccurringForm, self).__init__(*args, **kwargs)
        self.fields.keyOrder = [
            'monday',
            'tuesday',
            'wednesday',
            'thursday',
            'friday',
            'saturday',
            'sunday']