访问反向关系的prefetch_related字段

时间:2013-09-14 21:25:36

标签: django django-models orm

我有这个模特

class Animal(models.model):
    name = models.CharField()

class Dog(Animal):
    field = models.IntegerField()

class Owner(models.model):
    animal = models.ForeignKey(Animal)
    name = models.CharField()

现在假设我想要所有狗及其主人的名字。

dogs = Dog.objects.all().prefetch_related('owner_set')

如何从owner.name访问dogs

1 个答案:

答案 0 :(得分:5)

您可以从owner_set

获取
[owner.name for dog in dogs for owner in dog.owner_set.all()]

select_related()不同,prefetch_related()会阻止来自相关对象的数据,因此每次我们需要每只狗拥有一个owner_set时,这不会打到数据库 - 请参阅docs