Django烹饪食谱网站模型结构

时间:2012-02-01 16:19:17

标签: python mysql sql django model

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

所以我制作了两个模型

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

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

让我们想象一下,我有['egg','bread','meat','onion']列表。

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

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

所以我的问题是:是否可以选择所有可以从成分列表中制作的食谱,并从成分列表中选择最接近的食谱+来自商店的一些成分?

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

2 个答案:

答案 0 :(得分:3)

你试过了吗?

Receipt.objects.filter(ingredients__name__in=['egg','bread','meat','onion'])

答案 1 :(得分:0)

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

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

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

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

给我结果

  

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

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

receipts.find({'ingredients.name':{'$all':ingredients_list}})

MySQL有替代解决方案吗?