繁体   English   中英

Python Django 过滤器避免范围日期之间的重叠

[英]Python Django filter avoid overlapping between range dates

今天早上我有点逻辑空白。

我从用户(一个范围) start_timeend_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 2e 1 <b 2 ,则两个范围[b 1 , e 1 ][b 2 , b e ]重叠。 我们可以否定此表达式以了解两个区间何时重叠: b 1 ≤e 2e 1 ≥b 2

因此,这意味着我们可以过滤:

Schedule.objects.filter(start_date__lte=ts_end, end_date__gte=ts_start)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM