使用 2 个 M2M 字段的相关名称过滤 Django 模型

Filtering a Django model using the related names of 2 M2M fields

我的模型中有以下结构:

class Sauce(models.Model):
    ...

class Topping(models.Model):
    ...

class Pizza(models.Model):
    sauces = models.ManyToManyField(Sauce, related_name='pizzas')
    toppings = models.ManyToManyField(Topping, related_name='pizzas')

现在,假设我想在给定浇头和酱料列表的情况下查询所有比萨饼。例如:

sauces_ids = [2, 5, 7, 8]
toppings_ids = [1, 4, 5, 21]

使用 Django 的 ORM 进行查询最有效的方法是什么?感谢您的帮助。

Pizza.objects.filter(sauces__source_id__in=[2,5,6,8], toppings__topping_id__in=[1, 4, 5, 21])

假设这些是 pk/id 字段的值,您可以使用 __in 查找:

Pizza.objects.filter(sauces__in=sauces_ids, toppings__in=toppings_ids)

如果这些是其他字段的值,您还需要引用字段名称,例如字段名称 field:

Pizza.objects.filter(sauces__field__in=sauces_ids, toppings__field__in=toppings_ids)