如何在Django ManyToMany字段的反向中prefetch_related

时间:2018-04-15 16:23:14

标签: python django django-queryset manytomanyfield

在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')

如何以相反的方式执行相同操作,从pizza_set查询集中预取Topping

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

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

1 个答案:

答案 0 :(得分:0)

如果你像这样访问预取的比萨饼,这应该有效:

topping.pizza_set.all()

如果您执行类似

的操作
topping.pizza_set.filter(...some conditions etc...)

然后它不会工作,这是预期的(因为只预取了特定的查询结果)。