Json收到python:
{
"str_ini": "2020-06-05",
"fnsh_date": "2020-06-20",
}
我使用str_ini和fnsh_date作为参数来构建查询。
OrderModel.py:
fservice = models.DateTimeField(db_column='FService') # (In DB this field is datetime)
ffinishservice = models.DateTimeField(db_column='FFinishService') # (In DB this field is datetime)
Views.py:
pedidoparams = request.data
start_date = pedidoparams.get("str_ini")
finish_date = pedidoparams.get("fnsh_date")
order = (
OrderModel.objects.values("zone__zone")
.filter(fservice__gte=fecha_inicio)
.filter(ffinishservice__lte=fecha_final)
.annotate(order_activate=Count("cctt__id"))
)
print("query: ", str(pedidos.query))
然后python打印此查询:
query: SELECT `zone`.`Zone` AS `Zone`, COUNT(`order`.`cctt_id`) AS `order_activate` FROM `order` INNER JOIN `zone` ON (`order`.`Zone_Id` = `zone`.`Id`) WHERE (`order`.`fservice` >= 2020-06-05 00:00:00 AND `order`.`ffinishservice` <= 2020-06-20 00:00:00) GROUP BY `zone`.`Zone`
我的问题是:为什么要在查询中增加小时,分钟和秒? 如果仅接收日期,则查询中可能是:
... Where (`order`.`fservice` >= 2020-06-05 00:00:00 AND `order`.`ffinishservice` <= 2020-06-20 23:59:59)
答案 0 :(得分:0)
数据库中的字段为日期时间,因此Django将日期强制为日期时间。从日期开始的日期时间的默认时间是午夜。
如果您输入的是日期,则可以
lt
代替lte
lte
(这可能会错过a秒,但这没关系)from django.utils.dateparse import parse_date
import datetime
start_date = parse_date(pedidoparams["str_ini"])
finish_date = parse_date(pedidoparams["fnsh_date"])
start_datetime = datetime.datetime.combine(start_date, datetime.time())
end_datetime = datetime.datetime.combine(end_date, datetime.time(23, 59, 59))
order = (
OrderModel.objects.values("zone__zone")
.filter(fservice__gte=start_datetime)
.filter(ffinishservice__lte=end_datetime)
.annotate(order_activate=Count("cctt__id"))
)
答案 1 :(得分:0)
您要在查询中添加小时,分钟和秒,因为您的模型由DateTime字段组成。