如何在Django model.object.values()中对列字段进行排序

时间:2011-07-07 11:26:05

标签: django django-models

我正在使用此

objects = Model.objects.values('var1', 'var2', 'var4')

IN模板我使用

{% for fieldname in object.keys %}<th>{{ fieldname }}</th>{% endfor %}

但是字段名称以任意顺序出现,如

var4---var1----var2

我希望它们看起来像我在功能中提供的

var1---var2----var4

这是可能的

2 个答案:

答案 0 :(得分:3)

最简单的解决方案是使用values_list,它会返回元组并相应地更改模板。 https://docs.djangoproject.com/en/1.3/ref/models/querysets/#django.db.models.query.QuerySet.values_list

如果出于某种原因,你想继续使用dict-s,并想要一个“自动化”的解决方案,你必须做很多工作:

  1. 子类Django的ValuesQuerySet,将其命名为ex。 OrderedValuesQueryset并更改iterator方法以使用OrderedDict http://docs.python.org/dev/library/collections.html#collections.OrderedDict

  2. 创建一个Queryset子类 在它的.values方法返回一个实例 你的OrderedValuesQuerySet

  3. 创建自定义models.Managerget_query_set的课程 方法使用您的自定义QuerySet 从2开始。
  4. 设置要在模型中使用的自定义管理器。请参阅https://docs.djangoproject.com/en/1.3/topics/db/managers/#custom-managers
  5. 现在您要做的事情将自动在该模型上运行。您还可以将自定义管理器设置为与objects不同的属性,以使默认管理器保持可用。

答案 1 :(得分:0)

问题在于如何对Python字典进行排序,因为这是values()返回的内容。根据定义,Python字典没有排序。

See this blog post