页面刷新中断排序顺序。服务器重启恢复它

时间:2014-06-04 01:55:26

标签: python django sorting

我有一个已排序的 QuerySet 我通过 dict 传递给模板。我需要通过 dict 维护 QuerySet 排序顺序,以动态填充表格。

我试图通过This Answer建议的嵌套列表来解决此问题。我已使用This Suggestion附加此解决方案。

Apache2重新启动后 - 表的第一次加载具有正确的排序。点击刷新后,排序就会中断。我可以多次单击刷新并最终获得排序,但是......另一个Apache重新启动会将排序顺序重置为预期。

任何人都可以帮助我吗? THX。

更新

请注意finished_case是外键。 finished_case还会继承Meta类属性ordering = ['name']。但我也明确地.order_by('finished_case__name')

views.url:

def caseindex(request):
    qtylist = caseStockOnHand(request)
    srtd = sorted(qtylist.items(), key=lambda item: item[0])
    context = {'qtyonhand':srtd}
    return render(request,'box_inv/caseindex.html', context)

methods.url:

def caseStockOnHand(request):
    s = stocktake.objects.filter(stocktake_type__name='Case').latest('date')
    c = caselog.objects.filter(date__gte=s.date)
    sd = stocktake_detail_case.objects.filter(stocktake=s).order_by('finished_case__name')

    qtylist = {}
    #Get Stocktake Qty
    for x in sd:
        qtylist[x.finished_case] = x.qty
    return qtylist

template.html

{% for x, y in qtyonhand %}
        {% if y > 0 %}
        <tr class = {% cycle 'row1' 'row2' %}>
            <td>{{x}}</td>
            <td>{{y}}</td>
        </tr>
        {% endif %}
{% endfor %}

另外,我在Debian Wheezy 7.5上使用django 1.5,python 2.7,mysql 5.5和带有mod_wsgi的Apache 2.2。

1 个答案:

答案 0 :(得分:1)

您的示例显然不代表您的代码,因为您使用字符串作为字典键,并且在您的代码中说它们不是字符串,而是查询集。尝试在没有实际代码的情况下回答:您使用查询集作为字典键,并且它们的哈希值(可能是从其内存地址生成)用于对最终列表进行排序。查询集没有有意义的排序,因此每次重新加载后您可能会看到不同的结果。相反,您需要使用查询集内容进行排序。

修改:替换

qtylist[x.finished_case] = x.qty

使用:

qtylist[x.finished_case.name] = x.qty

以前的键是finished_case对象,它们没有有意义的排序。后者是字符串,具有您想要的顺序。

替代方法:删除字典和排序。代码变为:

qtylist = []
for x in sd:
    qtylist.append((x.finished_case.name, x.qty))
return qtylist