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