[英]Combine filter results in for loop
我正在使用Django建立一個網站。 我想結合多個過濾結果(Querysets)。
我模特的關系
'工作人員'1:m'會員'1:m'PaymentHistory'1:1'RefundHistory'
我的view.py:
wanted_refund = set()
for m in staff.members.all():
payment = m.PaymentHistory.filter(division="Membership")
for p in payment:
try:
refund = RefundHistory.objects.filter(payment=p).filter(refund_date__range=[this_month_start, date])
wanted_refund.add(refund)
except RefundHistory.DoesNotExist:
pass
context = {
'wanted_refund' : wanted_refund,}
return render(request, 'refund.html', context)
但是,使用過濾器不起作用。 它只適用於我使用'get'。
print(refund)
顯示結果如下:
< QuerySet [] >
< QuerySet [] >
< QuerySet [] >
< QuerySet [< RefundHistory: RefundHistory object >] >
我想只使用具有該對象的Querysets,我想要的是模板中的下面一個:
{% for refund in wanted_history %}
{{ refund.refund_date }}
{{ refund.refund_amount}}
{% endfor %}
如何將多個過濾器結果傳遞給for循環?
您可以使用管道運算符連接查詢集:
wanted_refund = RefundHistory.objects.none()
for m in staff.members.all():
payment = m.PaymentHistory.filter(division="Membership")
for p in payment:
try:
wanted_refund |= RefundHistory.objects.filter(payment=p).filter(refund_date__range=[this_month_start, date])
except RefundHistory.DoesNotExist:
pass
wanted_refund = wanted_refund.distinct()
context = {'wanted_refund': wanted_refund}
return render(request, 'refund.html', context)
此外,如果它適合您,您可以使用wanted_refund.update(list(refund))
代替wanted_refund.add(refund)
使用RefundHistory
的單個查詢, RefundHistory
每個會員的每次付款的退款歷史記錄:
payments = []
for m in staff.members.all():
payments.extend(m.PaymentHistory.filter(division="Membership").values_list('pk', flat=True))
wanted_refund = RefundHistory.objects.filter(payment__pk__in=payments, refund_date__range=[this_month_start, date])
context = {'wanted_refund' : wanted_refund,}
return render(request, 'refund.html', context)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.