在for循环中合并过滤器结果

2024-04-27 05:13:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Django做一个网站。我想合并多个过滤结果(查询集)。在

我的模特关系

'Staff'1:m'成员'1:m'PaymentHistory'1:1'退款历史'

我的视图.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)显示结果如下:

^{pr2}$

我只想使用包含该对象的查询集,我想要的是模板中的以下查询集:

{% for refund in wanted_history %}
 {{ refund.refund_date }}
 {{ refund.refund_amount}}
 {% endfor %}

如何传递for循环中的多个过滤器结果?在


Tags: djangoin过滤器fordate关系网站context
2条回答

使用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)

可以使用管道运算符联接查询集:

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))代替{}

相关问题 更多 >