【问题标题】:How to prefetch_related in reverse of a Django ManyToMany field如何与 Django ManyToMany 字段反向 prefetch_related
【发布时间】:2018-09-25 10:02:11
【问题描述】:

在 Django 中,如果我有一个 ManyToManyField:

class Topping(models.Model):
    name = models.CharField(max_length=30)

class Pizza(models.Model):
    name = models.CharField(max_length=50)
    toppings = models.ManyToManyField(Topping)

使用prefetch_related() 访问Pizza 模型的toppings 字段时,我可以最大限度地减少对数据库的命中:

Pizza.objects.all().prefetch_related('toppings')

我怎样才能从 Topping 查询集中预取 pizza_set

这不起作用,我在文档中找不到它:

Topping.objects.all().prefetch_related('pizza_set')

【问题讨论】:

  • 应该可以。您是否收到错误或空查询集或其他问题?

标签: python django django-queryset manytomanyfield


【解决方案1】:

如果您像这样访问预取的比萨,这应该可以工作:

topping.pizza_set.all()

如果你这样做

topping.pizza_set.filter(...some conditions etc...)

那么它将不起作用,这是预期的(因为只预取了特定的查询结果)。

【讨论】:

    猜你喜欢
    • 2016-01-11
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2012-11-16
    • 2015-08-13
    • 2012-03-08
    相关资源
    最近更新 更多