繁体   English   中英

在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

请注意,我对结束日期的值进行了硬编码,这不是一个好习惯,您可以使用 datetime 库轻松指定过滤器的范围(天)

这是另一个代码片段

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过滤器

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM