在 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
我需要使用 (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