【问题标题】:django order by date in datetime / extract date from datetimedjango 按日期时间中的日期排序/从日期时间中提取日期
【发布时间】:2010-09-06 16:37:52
【问题描述】:

我有一个带有日期时间字段的模型,我想显示今天查看次数最多的条目。

我想我可能会尝试使用 dt_published__date 之类的方法从日期时间字段中提取日期,但显然它不起作用。

popular = Entry.objects.filter(type='A', is_public=True).order_by('-dt_published__date', '-views', '-dt_written', 'headline')[0:5]

我该怎么做?

【问题讨论】:

    标签: sql django datetime


    【解决方案1】:

    AFAIK Django 还不支持 __date 语法。有一个ticket 为此开放。

    如果您的数据库具有提取日期部分的功能,那么您可以这样做:

    popular = Entry.objects.filter(**conditions).extra(select = 
        {'custom_dt': 'to_date(dt_published)'}).order_by('-custom_dt')
    

    【讨论】:

    • 但这不会减慢我的查询速度吗?
    • 对于 PostgresSQL:popular = Entry.objects.filter(**conditions).extra(select={'custom_dt': "date_trunc('day', dt_published)"}, order_by=['- custom_dt'、'-views'、'-dt_written'、'headline'])[0:5]。 postgresql.org/docs/8.0/static/…
    • 事实上对于 PostgresSQL 它是Entry.objects.filter(**conditions).extra(select={'custom_dt': 'DATE(dt_published)'}).order_by('-custom_dt')
    • 我可以看到这个功能已经添加到 Django,至少在我的 3.2 上它可以工作Payment.objects.filter(order_id=135342).order_by('paid_date__date', 'id').values_list('id', 'paid_date__date')
    【解决方案2】:

    在新的 Django 中,它应该可以使用 Mysql 5.7 开箱即用 [在 3.2 上测试]

    数据集

    [
      { "id": 82148, "paid_date": "2019-09-30 20:51:11"},
      { "id": 82315, "paid_date": "2019-09-30 00:00:00"},
    ]
    

    查询

    Payment.objects.filter(order_id=135342).order_by('paid_date__date', 'id').values_list('id', 'paid_date__date')
    
    

    结果

    `<QuerySet [(82148, datetime.date(2019, 9, 30)), (82315, datetime.date(2019, 9, 30))]>`
    

    【讨论】:

      猜你喜欢
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 2017-08-30
      相关资源
      最近更新 更多