【发布时间】:2014-05-08 16:53:58
【问题描述】:
我可以修改以下查询以使其更简洁地使用 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
我希望你明白这是什么意思。
查询应该保持相同的逻辑!
【问题讨论】:
-
您可以使用range 搜索两个日期之间的日期字段,但似乎不是您的情况。
-
你能告诉我它的样子吗?提前致谢!
-
您能否强制您的
from_date值小于或等于(或严格小于,如果适用)您的to_date?如果是这样,这允许简化。另外,模型上的from_date和to_date值是否可以为空? -
from_date 总是小于 to_date
-
嗯。实际上,您的查询不会找到完全在新的
from_date和to_date值内的结果。这是故意的吗?
标签: django django-models django-queryset django-orm