基于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)
我想基于 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)