2010-02-02 67 views
2

我是Django的新手,我想知道是否有更有效的方式(在數據庫級別)執行以下操作。django模型中的不同元素

我有模式:

class Foo(models.Model): 
    item=models.IntegerField() 
    another_item=models.IntegerField() 

,並希望得到「項」的所有不同值的迭代。

這是我到目前爲止有:

distinct=set([row.item for row in Foo.objects.all()]) 

這是很容易理解。但是如果我理解Django是如何工作的,則SQL查詢是不是很有效,因爲它是這樣的:

SELECT * FROM DB 

時,我只需要:

SELECT DISTINCT item FROM DB 

更有效地這樣做的方法嗎?

回答

4

您想要將distinct子句與valuesvalues_list子句結合使用。

Doc starts heredistinctvaluesvalues_list都在那裏。

所以,你可以這樣做:

Foo.objects.values_list('item', flat=True) 

這將返回項目的列表 - 符合SELECT DISTINCT item FROM DB查詢。

+0

這似乎是工作。 你知道一種檢查由django表達式生成的查詢的方法嗎? – Ezequiel 2010-02-02 01:49:14

+0

好的......這已被問到http://stackoverflow.com/questions/1074212/show-the-sql-django-is-running – Ezequiel 2010-02-02 01:52:42

+0

太棒了..我檢查了你是100%正確的。謝謝 Foo.objects.all()。values_list('item',flat = True).distinct() 我開始喜歡Django,就像我愛Python – Ezequiel 2010-02-02 01:55:30