假设我在 Environment
和 Animal
之间有一个多对多关系,连接表如下所示:
environment_id animal_id
1 1
1 2
1 3
2 1
2 3
3 2
3 4
3 5
4 2
4 3
5 2
5 4
假设我有一组 ID 为 (1,2,3)
的 Animal
,我如何查询数据库以返回仅包含以下子集的环境这些动物与他们有关吗?在此示例中,这将是 ID 为 (1,2,4)
的 Environments
,但不是 3
或 5
。
如果我尝试:
animals = Animal.objects.filter(id__in=(1,2,3))
animal_list = AnimalList.objects.filter(animal__in=animals)
显然这是行不通的,因为它们都至少有我的子集中的一种动物。
模型类本质上是:
class Environment(models.Model):
name = models.CharField(max_length=250)
animals = models.ManyToManyField(Animal, through='AnimalList')
class Animal(models.Model):
name = models.CharField(max_length=200)
safe_around_david_cameron = models.BooleanField()
class AnimalList(models.Model):
environment = models.ForeighKey(Environment)
animal = models.ForeignKey(Animal)
最佳答案
Documentation of pk-lookup-shortcut
animals = Animal.objects.filter(id__in=[1,2,3])
关于python - 在关系一侧的子集上查询多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32786046/