首页 > 解决方案 > Django ORM 从 ISO 时间和分数按天排序

问题描述

嗨,在我的数据库中,我有一些带有创建日期的数据和一些与之相关的分数。 created_date 是 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

谢谢

标签: djangopython-3.xdjango-modelsdjango-orm

解决方案


在这里添加查找似乎没有多大意义__day,您可以按降序排列created_by_date

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

如果您真的想在当天订购您可以使用带有TruncDate[Django-doc]的注释:

from django.db.models.functions import TruncDate

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

推荐阅读