我可以修改以下查询,使其使用Django ORM更简洁吗?
queryset.filter((Q(from_date__lte=from_date) & \
Q(to_date__gt=from_date)) | \
(Q(from_date__lte=to_date) &
Q(to_date__gt=to_date)))
以下是一些例子:
"from_date": "2014-05-11 08:00:00",
"to_date": "2014-05-11 10:00:00",
"from_date": "2014-05-12 12:00:00",
"to_date": "2014-05-12 15:00:00",
这些是数据库中的日期
如果您提交
fromDate=2014-05-11 08:00:00
toDate=2014-05-11 13:00:00
应该只给我第一个日期
"from_date": "2014-05-11 08:00:00",
"to_date": "2014-05-11 10:00:00",
这里再次,应该只给我第一个结果
fromDate=2014-05-11 09:00:00
toDate=2014-05-11 13:00:00
如果我提交以下日期
fromDate=2014-05-11 07:00:00
toDate=2014-05-11 09:00:00
同样,只应采取第一个结果
如果你这样做,你可以得到两个结果
fromDate=2014-05-11 09:00:00
toDate=2014-05-12 13:00:00
我希望你明白这个想法是什么。
查询应保持相同的逻辑!
答案 0 :(得分:1)
queryset.filter(to_date__gt=from_date, from_date__lt=to_date)
也就是说,要返回,事件必须在新事件开始后结束,并且必须在新事件结束之前开始。任何在新的from_date之前结束的内容都不会被返回,也不会在它结束之后才开始。
这与原始查询不完全匹配,但它确实与评论中描述的行为相匹配,因为数据库中的记录完全在新日期设置的范围内。