2014-02-07 3 views
2

Foo.objects.all().distinct('foo') не удаляет дубликатыДжанго различны и order_by

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 btw.

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... 


        ^
+0

Только в postgress: ["Для отдельного вызова с указанными именами полей база данных будет сравнивать только указанные имена полей."] (Https://docs.djangoproject.com/en/dev/ref /models/querysets/#django.db.models.query.QuerySet.distinct) – danihp

+0

@ danihp: да, но вы должны снабжать 'order_by()' без аргументов, и я не уверен, что это будет уважать Meta. упорядоченность. – eugene

+0

'order_by()' с параметрами out * not * respect Meta ordering. Он предназначен для очистки наследования, заказанного из модели meta, для повышения производительности, когда сортировка не нужна (помните, что порядок может включать ссылки на поля и объединения). Все в документах. – danihp

ответ

Смежные вопросы