Djnago QuerySet:distinct() 适用于一个领域,但不适用于另一个领域

时间:2021-06-19 16:14:57

标签: django django-models django-queryset

我有两个字段的 QuerySet:

```Python
print(products_mtm)

<QuerySet 
[
{'fk_products': 2653, 'fk_classes': 20}, 
{'fk_products': 2653, 'fk_classes': 23}, 
{'fk_products': 2653, 'fk_classes': 29}, 
{'fk_products': 2654, 'fk_classes': 20}, 
{'fk_products': 2654, 'fk_classes': 21}, 
{'fk_products': 2654, 'fk_classes': 24}, 
{'fk_products': 2655, 'fk_classes': 20},
{'fk_products': 2655, 'fk_classes': 25},
....]

print(products_mtm.values_list('fk_products').distinct())

print(products_mtm.values_list('fk_classes').distinct())
<QuerySet [(20,), (23,), (29,), (20,), (21,), (24,), (20,) (25,)...] #It does't DISTINCT it is  full values_list of the 'fk_classes'

``` 

1 个答案:

答案 0 :(得分:0)

是排序的问题。 products_mtm 上面有 order_by('fk_products')docs.djangoproject.com/en/3.2/ref/models/querysets/#distinct – alv2017

我可以拒绝这个 order_by - 并且所有 distinct() 都可以正常工作。但是,如果订购是必要的,那么对我来说就是一种简单的方式 - 只需使用 set(products_mtm.values_list('fk_classes')) 而不是 distinct()(可能它不是 Django QuerySets 原生的,但它可以正常工作。)