我挣扎让我周围的Django的ORM头。我想做的事就是我的表中的字段中获得不同值的列表....下面的一个等价的:

SELECT DISTINCT myfieldname FROM mytable

(或备选地)

SELECT myfieldname FROM mytable GROUP BY myfieldname

我至少喜欢诉诸原始SQL之前做Django的方式。 例如,与表:

  

ID,街道,城市

     

1,主街,赫尔

     

2,其他街道,赫尔

     

3,比博路,莱斯特

     

4,另一种方法,莱斯特

     

5,高街,Londidium

我想获得:

  

赫尔,莱斯特,Londidium。

有帮助吗?

解决方案

假设你的模式是 '店'

class Shop(models.Model):
    street = models.CharField(max_length=150)
    city = models.CharField(max_length=150)

    # some of your models may have explicit ordering
    class Meta:
        ordering = ('city')

由于你可能有Metaordering属性集,则可以使用order_by()不带参数使用distinct()时清除任何顺序。见下 order_by()

  

如果您不希望任何顺序被应用到查询做,甚至没有默认的排序,调用ORDER_BY()不带参数。

distinct() 在论述问题的说明使用distinct()与排序。

要查询你的数据库,你只需要调用:

models.Shop.objects.order_by().values('city').distinct()

它返回一个dictionnary

models.Shop.objects.order_by().values_list('city').distinct()

这一个返回ValuesListQuerySet它可以转换为list。 您还可以添加flat=Truevalues_list扁平化的结果。

参见:找字段查询集的不同值

scroll top