【发布时间】:2019-11-17 09:41:59
【问题描述】:
我有以下型号:
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 = [1, 2]
toppings_ids = [1, 2]
我现在在我的 API 视图中正在做的事情如下:
pizzas = Pizza.objects.filter(restaurant=restaurant)
if request.data.get('sauces_ids', []):
pizzas = pizzas.filter(
sauces__in=
request.data['sauces_ids']
)
if request.data.get('toppings_ids', []):
pizzas = pizzas.filter(
toppings__in=
request.data['toppings_ids']
)
return pizzas.distinct()
我使用distinct() 函数解决了一个重复问题。但是,现在我面临一个不同的问题。我的数据库中有 2 个比萨饼:
- 比萨 1 加酱汁 = [1, 2],浇头 = [1, 2]
- 披萨 2 加酱汁 = [1, 2],浇头 = [1]
使用上面的查询参数,我想只返回 Pizza 1,因为 2 个 M2M 列表完全匹配。但是,我写的查询是返回两个比萨饼。我该如何解决这个问题?感谢您的帮助。
此外,这是一种有效的方法吗?
【问题讨论】:
标签: django django-models django-orm