fix: 订单列表 FluentQuery 状态统计污染导致列表为空
This commit is contained in:
@@ -93,6 +93,40 @@ def orders_for_request(request):
|
||||
return filter_queryset_by_club(Order.query.all(), request, club_field='ClubID')
|
||||
|
||||
|
||||
def order_scope_qs(request=None):
|
||||
"""
|
||||
订单列表作用域 QuerySet。
|
||||
request 为 None 时不按俱乐部过滤(旧 /yonghu 订单列表,与改造前一致)。
|
||||
"""
|
||||
from orders.models import Order
|
||||
qs = Order.query.all()
|
||||
if request is not None:
|
||||
qs = filter_queryset_by_club(qs, request, club_field='ClubID')
|
||||
return qs
|
||||
|
||||
|
||||
def count_order_status_buckets(q_conditions, request=None):
|
||||
"""
|
||||
统计各状态订单数。
|
||||
每次从全新 FluentQuery 起链,避免 FluentQuery.filter 原地累积导致列表被滤空。
|
||||
"""
|
||||
from django.db.models import Q
|
||||
|
||||
buckets = (
|
||||
('1,7', Q(Status__in=[1, 7])),
|
||||
('2', Q(Status=2)),
|
||||
('8', Q(Status=8)),
|
||||
('3', Q(Status=3)),
|
||||
('4', Q(Status=4)),
|
||||
('5', Q(Status=5)),
|
||||
('6', Q(Status=6)),
|
||||
)
|
||||
counts = {'all': order_scope_qs(request).filter(q_conditions).count()}
|
||||
for key, status_q in buckets:
|
||||
counts[key] = order_scope_qs(request).filter(q_conditions & status_q).count()
|
||||
return counts
|
||||
|
||||
|
||||
def paginate_fluent_query(fluent_qs, page, page_size):
|
||||
"""
|
||||
FluentQuery 分页。直接切片底层 Django QuerySet,绕过 FluentQuery 缓存。
|
||||
|
||||
Reference in New Issue
Block a user