Django 仅在一个范围内基于月份和日期过滤日期时间
Django filter datetime based on month and day only in a range
我正在尝试过滤某个范围内的模型对象。如果我考虑年份,那么我可以像下面这样做得很好:
today = datetime.date.today()
start_date = today + datetime.timedelta(days = 1)
end_date = today + datetime.timedelta(days = 7)
for required_day in required_days:
filter_dict.update({
required_day + "__range" : [start_date, end_date]
})
list_of_Q = [Q(**{key: val}) for key, val in filter_dict.items()]
if list_of_Q:
model_objects = Model.objects.filter(reduce(operator.or_, list_of_Q))
但我想做的是仅根据 datetime
.
的 day
和 month
的值进行过滤
我试过如下:
for required_day in required_days:
filter_dict.update({
required_day + "__month__gte" : start_date.month,
required_day + "__day__gte" : start_date.day,
required_day + "__month__lte" : end_date.month,
required_day + "__day__lte" : end_date.day,
})
但是我在这里没有得到正确的值。我该如何纠正?
问题是在 list_of_Q
中,filter_dict
中的每个项目都是单独考虑的。因此,当我在 list_of_Q
上使用 reduce
时,它会分别考虑每个 required_day
的 start_date
和 end_date
。
所以我写的解决方案如下:
filter_list = []
for required_day in required_days:
filter_list.append(Q(**{
required_day + "__month__gte" : start_date.month,
required_day + "__day__gte" : start_date.day,
required_day + "__month__lte" : end_date.month,
required_day + "__day__lte" : end_date.day,
}))
if filter_list:
#continue with the logic
现在这会为每个 required_day
个整体添加 Q
个对象。
我正在尝试过滤某个范围内的模型对象。如果我考虑年份,那么我可以像下面这样做得很好:
today = datetime.date.today()
start_date = today + datetime.timedelta(days = 1)
end_date = today + datetime.timedelta(days = 7)
for required_day in required_days:
filter_dict.update({
required_day + "__range" : [start_date, end_date]
})
list_of_Q = [Q(**{key: val}) for key, val in filter_dict.items()]
if list_of_Q:
model_objects = Model.objects.filter(reduce(operator.or_, list_of_Q))
但我想做的是仅根据 datetime
.
day
和 month
的值进行过滤
我试过如下:
for required_day in required_days:
filter_dict.update({
required_day + "__month__gte" : start_date.month,
required_day + "__day__gte" : start_date.day,
required_day + "__month__lte" : end_date.month,
required_day + "__day__lte" : end_date.day,
})
但是我在这里没有得到正确的值。我该如何纠正?
问题是在 list_of_Q
中,filter_dict
中的每个项目都是单独考虑的。因此,当我在 list_of_Q
上使用 reduce
时,它会分别考虑每个 required_day
的 start_date
和 end_date
。
所以我写的解决方案如下:
filter_list = []
for required_day in required_days:
filter_list.append(Q(**{
required_day + "__month__gte" : start_date.month,
required_day + "__day__gte" : start_date.day,
required_day + "__month__lte" : end_date.month,
required_day + "__day__lte" : end_date.day,
}))
if filter_list:
#continue with the logic
现在这会为每个 required_day
个整体添加 Q
个对象。