Python/Django:按Concat()过滤对象,并按相同的连接顺序排序

2024-06-09 19:11:38 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的Python/djangoapi项目中,我需要从一个模型中获取一个quesryset,该模型通过两个字段的串联组合进行过滤,并通过相同的串联进行排序。但是,我只知道按如下所示的一个字段进行过滤

要求:时间表有两个字段“日期”和“时间”。我需要列出这两个字段的组合大于当前日期时间的数据

代码:

current_time = datetime.now()

timetable = TimeTable.objects.filter(user=user_id, date__gte=current_time.date()).order_by(Concat('date','time'))

MySQL相当于该场景:

SELECT * FROM time_table where concat(date,' ',time)>='2020-03-24 12:00:00' and user=user_id order by concat(date,' ',time) ASC

我怎样才能做到这一点


Tags: 项目模型iddatebytime排序时间
1条回答
网友
1楼 · 发布于 2024-06-09 19:11:38

只需在^{}函数中提供多个字段

TimeTable.objects.filter(date__gte='2020-04-02').order_by('date','time')

注意:您不必包含这些值(在您的情况下)


更新

from django.db.models.functions import Concat, Cast
from django.db.models import DateTimeField, CharField, Value
from datetime import datetime

date_time_expr = Cast(Concat('date', Value(' '), 'time', output_field=CharField()), output_field=DateTimeField())

TimeTable.objects.annotate(date_time=date_time_expr).filter(date_time__gte=datetime.now()).order_by('date_time')

相关问题 更多 >