我正在努力了解 Django 的 ORM。我想要做的是在我的表的一个字段中获取不同值的列表....等同于以下之一:
SELECT DISTINCT myfieldname FROM mytable
(或者替代地)
SELECT myfieldname FROM mytable GROUP BY myfieldname
在求助于原始 sql 之前,我至少想以 Django 的方式来做。 例如,有一个表:
id, street, city
1, Main Street, Hull
2, Other Street, Hull
3, Bibble Way, Leicester
4, Another Way, Leicester
5, High Street, Londidium
我想得到:
Hull, Leicester, 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',)
由于您可能拥有 Meta
类 ordering
属性集(元组或列表),您可以使用 order_by()
而无需使用 distinct()
时清除任何排序的参数。请参阅 order_by
() 下的文档
If you don’t want any ordering to be applied to a query, not even the default ordering, call order_by() with no parameters.
和distinct()
在注释中讨论了使用 distinct()
进行排序的问题。
要查询您的数据库,您只需调用:
models.Shop.objects.order_by().values('city').distinct()
它返回一个字典
或
models.Shop.objects.order_by().values_list('city').distinct()
这一个返回一个 ValuesListQuerySet
,您可以将其转换为 list
。
您还可以将 flat=True
添加到 values_list
以展平结果。
关于django - 从表字段中选择不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2466496/