[英]Filter datetime field python
Json 接收 python:
{
"str_ini": "2020-06-05",
"fnsh_date": "2020-06-20",
}
我使用 str_ini 和 fnsh_date 作為參數來構建我的查詢。
訂單模型.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)
視圖.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)
數據庫中的字段是日期時間,因此 Django 將日期強制轉換為日期時間; 日期時間的默認時間是午夜。
如果您的輸入是日期,您可以
lt
而不是lte
lte
(可能會錯過閏秒,但這可能無關緊要)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"))
)
您在查詢中添加小時、分鍾和秒,因為您的 Model 由 DateTime 字段組成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.