You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何对模型DateTimeField字段使用大于小于条件筛选

解决方法

Django ORM 不支持在 filter() 中直接使用大于/小于符号做字段比较,需要通过双下划线字段查找后缀实现对应逻辑。

第一步:先修正模型定义笔误

你当前模型中的时间字段类名多写了一个 Field 后缀,修正后代码如下:

class Quiz(models.Model):
    title = models.CharField(max_length=50)
    start = models.DateTimeField(default="2021-10-10")
    end = models.DateTimeField(default="2021-10-11")

第二步:使用字段查找后缀实现大小比较

常用的时间比较对应的查找后缀如下:

  • __lt:小于(对应 < 运算符)
  • __lte:小于等于(对应 <= 运算符)
  • __gt:大于(对应 > 运算符)
  • __gte:大于等于(对应 >= 运算符)

你需要的 datetime.now() < end 条件,等价于 end 字段大于当前时间,对应写法为 end__gt=当前时间。
另外建议使用 Django 自带的 timezone.now() 代替原生 datetime.now(),避免开启时区支持后出现时间不匹配的问题。

修正后的视图代码如下:

from django.utils import timezone
from rest_framework import generics

class GetQuizView(generics.ListAPIView):
    serializer_class = QuizListSerializer
    
    def get_queryset(self):
        now = timezone.now()
        # 仅筛选结束时间大于当前时间的Quiz
        # 若需要筛选当前正在进行的测验,可补充start小于等于当前时间的条件:
        # return Quiz.objects.filter(start__lte=now, end__gt=now)
        return Quiz.objects.filter(end__gt=now)

内容的提问来源于stack exchange,提问作者Arslan Yersain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:06:00