Django 烹饪食谱网站模型结构

Mar*_*nso 5 python mysql sql django model

我正在 Django 网站上工作,应该可以选择包含用户提供的成分的烹饪食谱。简而言之,该网站的理念是“你可以用冰箱里的食物制作东西”。

所以我做了2个模型

class Recipe (models.Model):
   name = models.CharField(max_length=255)
   ingredients = models.ManyToManyField(Ingredient)

class Ingredient (models.Model):
    name = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)

让我们想象一下,我有 as list ['egg','bread','meat','onion']

现在我需要选择所有可以从成分列表中制作的食谱。问题是,某些食谱可能只有列表中的某些成分。
例如:

  • 鸡蛋吐司=鸡蛋+面包
  • 肉蛋吐司=肉+鸡蛋+面包
  • 洋葱肉=肉+洋葱
  • 等等...

所以我的问题是:是否可以从配料列表中选择所有可以制作的食谱,然后从配料列表中选择最接近的食谱+商店中的一些配料?

例如:recipes 有 4 个元素中的 3 个,因此我们将其添加到结果中。

Mar*_*nso 0

我想我找到了一个解决方案。使用代码

from itertools import chain, combinations
def all_subsets(ss):
    return chain(*map(lambda x: combinations(ss, x), range(0, len(ss)+1)))
Run Code Online (Sandbox Code Playgroud)

我能够从列表中选择所有可能的成分组合。

for s in all_subsets(['egg','bread','meat','onion']):
    if len(s)>2:
        print s
Run Code Online (Sandbox Code Playgroud)

给我结果

('鸡蛋', '面包', '肉') ('鸡蛋', '面包', '洋葱') ('鸡蛋', '肉', '洋葱') ('面包', '肉', '洋葱') ('鸡蛋', '面包', '肉', '洋葱')

现在的问题是如何优化查询,以便我可以选择包含该成分列表的所有食谱。在 MongoDB 中我使用的是

receipts.find({'ingredients.name':{'$all':ingredients_list}})
Run Code Online (Sandbox Code Playgroud)

MySQL 有其他解决方案吗?