sql - Django 查询用于列出相关查询中的所有外键对象

标签 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_ payment 关联的所有产品,从而获取用户已付款的所有产品的列表?在模板中,我喜欢使用 {%for item in products%} 循环遍历列表,而不需要将任何付款列表传递到模板中。

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

现在我通过循环 all_ payments QuerySet 来获取列表,但这感觉是非常糟糕的方法......

最佳答案

您可以使用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 %}

关于sql - Django 查询用于列出相关查询中的所有外键对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35427884/

相关文章:

python - Django MySQL : MigrationSchemaMissing Error Windows

django - heroku 和 django,对于类型字符变化来说值太长(50)

database - 使用 vb.net 2010 锁定后端 Access 数据库中的表

php - 如何设计个人消息数据库?

php - 随机化数据库中的数据

sql - 构建分布式 bittorrent-SQL 数据库

php - Codeigniter 3 中的 mysql 查询

django - Django 模型查询中的 OR 运算符

xml - 使用 XML 和 XSD 映射数据库的最佳实践

php - mysql时间戳和php查询