Как сделать набор запросов order_by и после этого сделать другой заказ, сохраняя результат первого? - PullRequest
1 голос
/ 12 июня 2019

Мне нужно отсортировать результат запроса по двум столбцам. Во-первых, мне нужно order_by «дата». После того, как мои запросы отсортированы, мне нужно отсортировать результат, поддерживая первый порядок с order_by 'status'.

Пример:


     date      status

2019-06-10 15:23:39 20


2019-06-12 15:37:31 20


2019-06-10 15:18:53 10


2019-06-12 15:38:01 10


2019-06-12 15:47:09 10


2019-06-12 15:36:30 0


2019-06-10 16:35:11 0


Мне нужен следующий результат:


     date      status

2019-06-12 15:37:31 20



2019-06-12 15:47:09 10


2019-06-12 15:38:01 10


2019-06-12 15:36:30 0


2019-06-10 15:23:39 20


2019-06-10 15:18:53 10


2019-06-10 16:35:11 0


Следуя документации dkango https://docs.djangoproject.com/en/2.0/ref/models/querysets/#order-by Я делаю order_by передать два поля, как order_by ('- date', '-status')

Я пытаюсь использовать следующий код

Measurements.objects.filter(patient=230).order_by('-date', '-status')

Мой результат:

         date      status
2019-06-12 15:47:09 10
2019-06-12 15:38:01 10
2019-06-12 15:37:31 20
2019-06-12 15:36:30 0
2019-06-10 16:35:11 0
2019-06-10 15:23:39 20
2019-06-10 15:18:53 10

Мне нужен следующий результат:

         date      status
2019-06-12 15:37:31 20
2019-06-12 15:47:09 10
2019-06-12 15:38:01 10
2019-06-12 15:36:30 0
2019-06-10 15:23:39 20
2019-06-10 15:18:53 10
2019-06-10 16:35:11 0

1 Ответ

0 голосов
/ 12 июня 2019

Вам нужно сначала усечь дату DateTimeField. Мы можем сделать это с TruncDate [Django-doc] :

from django.db.models.functions import <b>TruncDate</b>

Measurements.objects.annotate(
    <b>date_date=TruncDate('date')</b>
).order_by(<b>'-date_date'</b>, '-status')

Объекты Measurements, происходящие из этого набора запросов, будут иметь дополнительный атрибут .date_date, который усекает date до даты (поэтому время равно 0:00:00).

...