[英]Python Django filter avoid overlapping between range dates
今天早上我有点逻辑空白。
我从用户(一个范围) start_time
和end_time
得到 2 个datetime
时间对象。
如果输入范围和现有计划时间之间存在重叠,想法是返回一个存在。
我尝试了以下方法,但我与逻辑相去甚远。
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
)
如果b 1 >e 2或e 1 <b 2 ,则两个范围[b 1 , e 1 ]和[b 2 , b e ]不重叠。 我们可以否定此表达式以了解两个区间何时重叠: b 1 ≤e 2和e 1 ≥b 2 。
因此,这意味着我们可以过滤:
Schedule.objects.filter(start_date__lte=ts_end, end_date__gte=ts_start)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.