
新手上路,如果问题太简单请见谅
有原料和食谱两个 Model ,原料组成食谱。
class Ingredient(models.Model): name = models.CharField(max_length=200) unit = models.ManyToManyField('IngredientUnit') ## unit 后期可能会增删 class IngredientUnit(models.Model): name = models.CharField(max_length=200) class Recipe(models.Model): name = models.CharField(max_length=200) ingredients = ?? 比方说有
原料 1: { name: '酱油', unit: ['瓶', '桶'] } 原料 2: { name: '八角', unit: ['粒'] } 食谱: { name: '烧鸡', ingredients: [ { name: '酱油', unit: '瓶', amount: 1 }, { name: '酱油', unit: '桶', amount: 2 } // 酱油两桶不够,三桶太多 ] // 不可以出现“一粒酱油”的组合 } 1 johnman 2022-09-16 09:00:31 +08:00 unit 不要搞个外键吧,考虑用 choice |
2 ikuan 2022-09-16 09:18:17 +08:00 如果我没理解错意思的话 或许可以这样 class Ingredient(models.Model): name = models.CharField(max_length=200) unit = models.ManyToManyField('IngredientUnit') ## unit 后期可能会增删 class IngredientUnit(models.Model): name = models.CharField(max_length=200) class Recipe(models.Model): name = models.CharField(max_length=200) ingredients = models.ManyToManyField('Ingredient',through='recipe_ingredient',) class recipe_ingredient(models.Model): recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE) ingredient = models.ForeignKey(Ingredient, on_delete=models.CASCADE) quantity = models.IntegerField() |
3 metamask 2022-09-16 11:22:19 +08:00 反过来建可能会好些,从大慢慢拆小,不从小累到大,这么拆解可能些。 你先把建 Recipe 建了,然后再建 Ingredient , 这两者做个 m2m 关系。 至于原料单位用 choice 还是 model ,这个看需求,做成 model 后面扩展也好。 这里遇到问题在于,怎么把 Recipe 和 Ingredient 组装起来 这里建多一个 model 来绑定,叫 RecipeIngredient 在这里绑定后,增加需要字段,如 quantity (用 quantity 代替 amount 可能准确些),然后把单位要挪到这里也可能比较好些。 |
4 Vegetable 2022-09-16 11:30:35 +08:00 ingredients 放在这只能是一个 many to many ,不过这样已经无法实现你的 amount 属性了。 所以最好的办法是再增加一张表,手动管理食谱和原料的关系,后续增加其他功能也更方便 |
5 C0VN 2022-09-16 20:57:15 +08:00 |