Django,对查询项进行分组

时间:2009-12-30 18:38:11

标签: python django django-models django-views

说我有这样的模特:

class Foo(models.Model):
 name = models.CharField("name",max_length=25)
 type = models.IntegerField("type number")

在做了一些像Foo.objects.filter()这样的查询之后,我想把查询结果分组为:

[  [{"name":"jb","type:"whiskey"},{"name":"jack daniels","type:"whiskey"}],
[{"name":"absolute","type:"vodka"},{name:"smirnoff ":"vodka"}],
[{name:"tuborg","type":beer}]
]

您可以看到,将项目分组为词典列表。组查询列表列表也可以欢迎字典:)

此致

4 个答案:

答案 0 :(得分:3)

您可以使用查询集的values方法执行此操作:

http://docs.djangoproject.com/en/1.1/ref/models/querysets/#values-fields

  

值(*字段)

     

返回ValuesQuerySet - QuerySet   评估为列表   字典而不是模型实例   对象。

答案 1 :(得分:2)

查看regroup模板代码。如果要在模板中进行分组显示,那么这应该是您所需要的。否则,您可以阅读源代码以了解它们如何完成分组。

答案 2 :(得分:2)

您可以使用itertools.groupby()

在视图中进行分组

答案 3 :(得分:1)

您可以使用order_by执行此操作:

Foo.objects.order_by( "type" );
drinks = Foo.objects.all( )

现在您按类型订购了一系列饮品。您可以使用它或编写函数来创建所需的结构,而无需使用线性扫描对其进行排序。