我很难理解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。
values_list
实际上并不返回一个列表。它返回类似于查询集的东西。我发现在调用values_list
时始终使用list()
是很有用的。 - dheerosaurvalues_list
返回的是一个迭代器ValuesListQuerySet
。将其转换为列表可能很方便,但在需要一次性评估所有行的情况下,尤其是对于大型数据集,这样做也可能会影响性能。 - Peter Kilczukobjects.distinct()
与objects.ordering().distinct()
之间的区别,让我们困惑了数小时。这个产品应该有一个消费者安全警告标签 ;) 为了避免将来的困扰,我们可能会实施不允许使用“Meta:ordering”属性的策略。 - hobsMeta
类的ordering
属性,并使用没有参数的order_by()
来解决与distinct
相关的问题。在查询集API文档中,这些内容都在order_by()
中说明:“如果您不想对查询应用任何排序,即使是默认排序,也请调用没有参数的order_by()
方法。” - Mark Mikofski