使用 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)
我的模型中有以下结构:
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)