我是Django新手,我想知道是否有更有效的方式(在数据库级别)执行以下操作。
我有模特:
class Foo(models.Model):
item=models.IntegerField()
another_item=models.IntegerField()
想要获得“item”的所有不同值的迭代。
这是我到目前为止所做的:
distinct=set([row.item for row in Foo.objects.all()])
这很容易理解。但是,如果我理解Django如何工作,那么SQL查询效率不高,因为它类似于:
SELECT * FROM DB
当我只需要:
SELECT DISTINCT item FROM DB
如何更有效地做到这一点?
答案 0 :(得分:4)
您希望将distinct
子句与values
或values_list
子句结合使用。
Doc starts here。 distinct
,values
和values_list
都在那里。
所以你可以这样做:
Foo.objects.values_list('item', flat=True)
这会返回一个项目列表 - 与您的SELECT DISTINCT item FROM DB
查询匹配。