Python Django 过滤器避免范围日期之间的重叠
Python Django filter avoid overlapping between range dates
今天早上我有点逻辑空白。
我从一个用户那里得到了 2 个 datetime
个对象(一个范围),start_time
和 end_time
。
想法是 return 如果输入范围和现有计划时间之间存在重叠,则存在。
我尝试了以下方法,但与逻辑相去甚远。
if Schedule.objects.filter(start_date__gte=ts_start, end_date__lte=ts_start).filter(start_date__gte=ts_end, end_date__lte=ts_end ).exists():
你几乎成功了。要查找所有重叠的日期时间范围,您只需要过滤数据下限小于搜索上限且数据上限大于搜索下限的地方
overlap = Schedule.objects.filter(
start_date__lte=ts_end,
end_date__gte=ts_start
)
两个范围 [b1、e1] 和 [b2, be] 不 重叠 if b1>e2,或e1 2。我们可以否定这个表达式来知道两个区间何时重叠:b1≤e2,和 e1≥b2.
这意味着我们可以过滤:
Schedule.objects.filter(<strong>start_date__lte=ts_end, end_date__gte=ts_start</strong>)
今天早上我有点逻辑空白。
我从一个用户那里得到了 2 个 datetime
个对象(一个范围),start_time
和 end_time
。
想法是 return 如果输入范围和现有计划时间之间存在重叠,则存在。
我尝试了以下方法,但与逻辑相去甚远。
if Schedule.objects.filter(start_date__gte=ts_start, end_date__lte=ts_start).filter(start_date__gte=ts_end, end_date__lte=ts_end ).exists():
你几乎成功了。要查找所有重叠的日期时间范围,您只需要过滤数据下限小于搜索上限且数据上限大于搜索下限的地方
overlap = Schedule.objects.filter(
start_date__lte=ts_end,
end_date__gte=ts_start
)
两个范围 [b1、e1] 和 [b2, be] 不 重叠 if b1>e2,或e1 2。我们可以否定这个表达式来知道两个区间何时重叠:b1≤e2,和 e1≥b2.
这意味着我们可以过滤:
Schedule.objects.filter(<strong>start_date__lte=ts_end, end_date__gte=ts_start</strong>)