修复商家订单时间段筛选在USE_TZ=False下MySQL 500

This commit is contained in:
XingQue
2026-06-26 20:38:04 +08:00
parent c8b67a2fc8
commit 8f21491c72

View File

@@ -1,6 +1,7 @@
"""商家订单列表通用筛选(商家老板接口 + 子客服列表共用)。"""
from datetime import datetime
from django.conf import settings
from django.db.models import Q
from django.utils import timezone
from django.utils.dateparse import parse_datetime
@@ -8,11 +9,16 @@ from django.utils.dateparse import parse_datetime
from backend.utils import pick_leixing_id
def _aware_dt(dt):
def _db_dt(dt):
"""与项目 USE_TZ 设置一致USE_TZ=False 时必须返回 naive datetime。"""
if dt is None:
return None
if timezone.is_naive(dt):
return timezone.make_aware(dt, timezone.get_current_timezone())
if settings.USE_TZ:
if timezone.is_naive(dt):
return timezone.make_aware(dt, timezone.get_current_timezone())
return dt
if timezone.is_aware(dt):
return timezone.make_naive(dt, timezone.get_current_timezone())
return dt
@@ -30,15 +36,15 @@ def parse_order_list_bound(value, is_end=False):
return None
if is_end:
base = base.replace(hour=23, minute=59, second=59)
return _aware_dt(base)
return _db_dt(base)
dt = parse_datetime(raw.replace(' ', 'T', 1) if ' ' in raw and 'T' not in raw else raw)
if dt is None:
try:
base = datetime.strptime(raw[:19], '%Y-%m-%d %H:%M:%S')
return _aware_dt(base)
return _db_dt(base)
except ValueError:
return None
return _aware_dt(dt)
return _db_dt(dt)
def apply_merchant_order_list_filters(qs, data):