在 Django 中按日期时间过滤模型

Filter model by datetime in django

我需要使用 (datetime.now() < end) 过滤模型 我的模型

class Quiz(models.Model) :
    title = models.CharField(max_length=50)

    start = models.DateTimeFieldField(default="2021-10-10")
    end = models.DateTimeFieldField(default="2021-10-11")

我的观点

class GetQuizView(generics.ListAPIView) :
    def get_queryset(self):
        now = datetime.now()
        return Quiz.objects.filter(start = now)

    serializer_class = QuizListSerializer

但是我只能等时过滤,不能用>或者<

您将使用 __gt__lt__gte__lte

查看文档:https://docs.djangoproject.com/en/3.2/ref/models/expressions/

你可以这样写你的查询集

class GetQuizView(generics.ListAPIView) :
    def get_queryset(self):
        now = datetime.now()
        end = "2021-10-11"
        return Quiz.objects.filter(start__range=[end, now])
     serializer_class = QuizListSerializer

请注意,我将值硬编码为结束日期,这不是一个好的做法,您可以使用日期时间库轻松指定过滤器的范围(天)

这是另一个代码片段

import pytz
from datetime import date, timedelta
from django.conf import settings
#timezone aware object
today = datetime.today().astimezone(pytz.timezone(settings.TIME_ZONE))
one_week = timedelta(days=7)
end_date = today-one_week
class GetQuizView(generics.ListAPIView) :
    def get_queryset(self):
        return Quiz.objects.filter(start__range=[end_date, today])
     serializer_class = QuizListSerializer

您还可以使用 django __lt__gt 过滤器 doc

注意:astimezone()的本质是让查询时区感知,然后使时区继承自项目中定义的项目时区配置settings.py