基于ManytoMany字段的Django查询

Query based on ManytoMany Field Django

我想基于 ManytoMany 字段查询以下模型:

class Topping(models.Model):
    topping_name=models.CharField(max_length=16)

class Cart_Item(models.Model):
    pizza=models.ForeignKey(Pizza, blank=True, null=True, on_delete=models.CASCADE)
    toppings=models.ManyToManyField(Topping, blank=True)
    quantity=models.IntegerField()

我有一份可用的浇头清单。我想查询 Cart_Item 其中 toppings 字段包含列表中的所有值。例如,如果我的列表是 toppings_list=["Pepperoni","Mushroom"],那么我想要 Cart_Item,其中 toppings 仅包含这两种配料。我怎样才能这样查询?

我认为这是一个选择。


cart_items = (Cart_Item.objects.annotate(num_toppings=Count('toppings'))\
.filter(num_toppings__exact=2))\
.filter(toppings__topping_name=toppings_list[0])\
.filter(toppings__topping_name=toppings_list[1])

如果列表包含很多数据,那么您可以在循环中链接查询集。

for topping in toppings_list:
    cart_items = cart_items.filter(toppings__topping_name=topping)