动物物种可以属于许多动物园,动物园可以有许多动物物种。每个动物园都分配了一名动物园管理员。我需要一个包含特定动物物种的动物园管理员的查询集。
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
答案 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)