Django查询列出来自相关查询的所有ForeignKey对象

时间:2016-02-16 08:55:24

标签: sql django database django-queryset

我尝试进行一个简单的查询,在该查询中,我从单个用户对象中检索所有付款的所有产品。

以下是相关模型:

class Payment(models.Model):
    user = models.ForeignKey(User, related_name="payments")
    product= models.ForeignKey(Product)
...

最初我有一个名为user的用户对象。我可以使用all_payments = user.payments.all()检索所有付款。

如何扩展查询以检索与all_payments相关联的所有产品,以获取用户已支付的所有产品的列表?在模板I'喜欢使用{%for products in products%}遍历列表,而无需将任何付款清单传递到模板中。

我们应该如何更改该查询以从该QuerySet中删除所有可能的重复产品?

现在我通过循环遍历all_payments QuerySet来获取列表,但这样做真的很糟糕...

1 个答案:

答案 0 :(得分:2)

您可以使用prefetch_related

user.payments.all().prefetch_related('product')

要在模板中显示,您可以继续使用all_payments

{% for payment in all_payments %}
    {% for p in payment.product %}
          {# do something with the product p #}
    {% endfor %}
{% endfor %}