django distinct和order_by

问题描述 投票:3回答:1

Foo.objects.all().distinct('foo')不会删除重复项

Foo.objects.all().order_by().distinct('foo')确实删除了它们。

我有Meta.ordering =(' - field1',' - field2)

Foo.objects.all().order_by().distinct('foo')是否尊重Meta.ordering? 即我想要Meta.ordering排序的不同值,不知道如何做到这一点。

Django文档令人困惑,并没有解决没有任何参数的order_by()如何工作。

我正在使用postgresql 9.3顺便说一句。

In [28]: BestMomsdiaryThread.objects.all().values_list('momsdiary_thread__id', flat=True)
Out[28]: [3390, 5877, 5884, 6573, 5880, 6576, 6576, 6576, 6576, 6576, 6576, 6576, 6576, 6576, 6576, 6576, 6576, 6576, 6576, 6576, '...(remaining elements truncated)...']

In [29]: BestMomsdiaryThread.objects.not_deleted().order_by().distinct('momsdiary_thread').values_list('momsdiary_thread__id', flat=True)
Out[29]: [3390, 5877, 5880, 5884]

In [30]: BestMomsdiaryThread.objects.not_deleted().values_list('momsdiary_thread__id', flat=True)
Out[30]: [3390, 5877, 5884, 5880, 5877, 5880, 5884, 3390]


In [32]: BestMomsdiaryThread.objects.not_deleted().order_by('momsdiary_thread').distinct('momsdiary_thread').values_list('momsdiary_thread__id', flat=True)

ProgrammingError: SELECT DISTINCT ON expressions must match initial ORDER BY expressions
LINE 1: SELECT DISTINCT ON ("momsplanner_bestmomsdiarythread"."momsd...


                      ^
django django-queryset
1个回答
4
投票

来自https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.order_by

如果您不希望任何排序应用于查询,甚至不是默认排序,请调用order_by(),不带参数。

© www.soinside.com 2019 - 2024. All rights reserved.