Django ORM заказ по дням от времени и счета ISO - PullRequest
0 голосов
/ 29 мая 2019

HI в моей базе данных. У меня есть некоторые данные с датой создания и с ней связаны некоторые оценки. Созданная дата имеет тип DateTime. Я использую Django ORM.

Данные как

**col1   created_date                  score**
xxx    2019-05-28T10:07:57.000Z      8
yye    2019-05-27T10:07:57.000Z      9
abc    2019-05-28T09:07:57.000Z      10

Я хочу, чтобы моя дата сортировалась по дням, а затем в нисходящем порядке, т.е.

abc    2019-05-28T09:07:57.000Z      10
xxx    2019-05-28T10:07:57.000Z      8
yye    2019-05-27T10:07:57.000Z      9

Я использую

SomeModel.objects.values_list(col , score, created_date                                                                
).filter(somefilter tcategory=cat).order_by(
                        '-created_date__day',
                        '-score')

Я получаю исключение -

    raise NotImplementedError('subclasses of BaseDatabaseOperations may require a datetime_extract_sql() method')
NotImplementedError: subclasses of BaseDatabaseOperations may require a datetime_extract_sql() method

Спасибо

1 Ответ

0 голосов
/ 29 мая 2019

Кажется, что здесь нет смысла добавлять __day поиск, вы можете просто упорядочить в порядке убывания created_by_date:

SomeModel.objects.values_list(
    'col' , 'score', 'created_date'
).filter(
    somefilter tcategory=cat
).order_by(<b>'-created_date'</b>, '-score')

Если вы действительно хотите сделать заказ к дате этого дня, вы можете использовать аннотацию с TruncDate [Django-doc] :

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

SomeModel.objects.values_list(
    'col' , 'score', 'created_date'
).annotate(
    <b>create_day=TruncDate('created_date')</b>
).filter(
    somefilter tcategory=cat
).order_by(<b>'-create_day'</b>, '-score')
...