[英]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.