python - 在关系一侧的子集上查询多对多关系

标签 python mysql django many-to-many relational-database

假设我在 EnvironmentAnimal 之间有一个多对多关系,连接表如下所示:

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,但不是 35 。 如果我尝试:

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/

相关文章:

python - 有或没有蓝图的两种语言 Flask 网站

Python 内置函数

python - 如何绘制灰色 block ?

mysql - 错误 : dbeaver utility 'mysql.exe' not found in client home 'mysql binaries'

django 1.3 templatestag 如果字符串包含字符串列表

python - 我如何将数据保存/插入到表中以从表单中获取值?

python - Python 中的仿函数与函数闭包

mysql - 无法将 spring-boot 2 服务连接到不同容器中的 mysql

python - 在这种情况下,是否可以为特定页面自定义 django-tables2 模板?

java - 外部库中的 jar 但无法在代码中导入