当且仅当所有成分都包含在成分列表中时,我才需要寻找食谱。
在SQL中,查询类似于
SELECT *
FROM recipe r
WHERE no exists (SELECT 1
FROM recipe_ingredient ri
WHERE r.id = ri.recipe_id
AND ri.ingredient_id not in (1,2,3))
其中1,2,3是成分列表。
如何使用Django模型执行此操作?
答案 0 :(得分:1)
我不知道你的模型是怎样的,但这是一种可行的方法
# Possible models.py
class Recipe(models.Model):
ingredients = models.ManyToManyField('Ingredient', related_name='in_recipes')
...
class Ingredient(models.Model):
name = models.CharField(...)
# views.py
from django.db.models import Q
# Use Q objects to create a query that requires all ingredients
ingredient_query = None
for an_ingredient in REQUIRED_INGREDIENTS:
ingredient_query = ingredient_query & Q(ingredients=an_ingredient) if ingredient_query else Q(ingredients=an_ingredient)
recipes_with_ingredients = Recipe.objects.filter(ingredient_query)