新手上路,如果问题太简单请见谅
有原料和食谱两个 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 1
如果我没理解错意思的话 或许可以这样
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
freakxx 2022-09-16 11:22:19 +08:00 1
反过来建可能会好些,从大慢慢拆小,不从小累到大,这么拆解可能些。
你先把建 Recipe 建了,然后再建 Ingredient , 这两者做个 m2m 关系。 至于原料单位用 choice 还是 model ,这个看需求,做成 model 后面扩展也好。 这里遇到问题在于,怎么把 Recipe 和 Ingredient 组装起来 这里建多一个 model 来绑定,叫 RecipeIngredient 在这里绑定后,增加需要字段,如 quantity (用 quantity 代替 amount 可能准确些),然后把单位要挪到这里也可能比较好些。 |
4
Vegetable 2022-09-16 11:30:35 +08:00 1
ingredients 放在这只能是一个 many to many ,不过这样已经无法实现你的 amount 属性了。
所以最好的办法是再增加一张表,手动管理食谱和原料的关系,后续增加其他功能也更方便 |
5
xavierskip 2022-09-16 20:57:15 +08:00
|