我想要查询集中所有项的某个字段的查询集。我该怎么做?

时间:2018-03-27 01:51:42

标签: django python-3.x django-queryset

动物物种可以属于许多动物园,动物园可以有许多动物物种。每个动物园都分配了一名动物园管理员。我需要一个包含特定动物物种的动物园管理员的查询集。

from django.db import models

class Zoo(models.Model):
    zoo_keeper = models.ForeignKey(ZooKeeper, related_name='zoo')

class ZooKeeper(models.Model):
    #...

class Animal(models.Model):
    zoo = models.ManyToManyField(Zoo)

以下是我的解决方案,但有人告诉我这对大型数据库来说会很慢。我需要一些纯粹的django,也许是某种过滤器?

def get_queryset(self):
    animal_id = self.kwargs['pk']
    animal = Animal.objects.get(pk=animal_id)
    zoos = animal.zoo.all()
    queryset = [zoo.zoo_keeper for zoo in zoos]
    return queryset

这是我的另一个解决方案,我不确定它是否可行:

def get_queryset(self):
    animal_id = self.kwargs['pk']
    animal = Animal.objects.get(pk=animal_id)
    zoos = animal.zoo.all()
    queryset = ZooKeeper.objects.filter(zoo__in=zoos)
    return queryset

1 个答案:

答案 0 :(得分:0)

假设您有一个animal instance id's(动物物种)清单,那么

animal_species = [1, 2, 3, 4]  # instance id's of animal_species
zoo_keeper_queryset = ZooKeeper.objects.filter(zoo__animal__in=animal_species)

如果您只有一个animal_species,那么您可以使用它,

zoo_keeper_queryset = ZooKeeper.objects.filter(zoo__animal=single_animal_species)