如何处理数据库中的配方成分

How to handle recipe ingredients in database

嗨,我是编程新手,我正在建立一个食谱网站来学习,但我正在苦苦挣扎的是如何处理食谱成分?我想做以下事情:

下面是我认为模型想要的,但我不确定这是正确的还是最好的方法,欢迎任何建议。

recipe/models.py

User = settings.AUTH_USER_MODEL

class Recipe(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    recipeName = models.CharField(max_length=220) # grilled chicken pasta
    userRecipeIngredients = models.ManyToManyField(UserCreatedIngredient, blank=True, Null=True, through='IngredientToRecipe')
    globalRecipeIngredients = models.ManyToManyField(GlobalIngredient, blank=True, Null=True, through='IngredientToRecipe')


class UserCreatedIngredient(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    name = models.CharField(max_length=220) # grilled chicken

class GlobalIngredient(models.Model):
    name = models.CharField(max_length=220) # chicken

class IngredientToRecipe(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    userIngredient = models.ForeignKey(UserCreatedIngredient, on_delete=models.SET_NULL)
    globalIngredient = models.ForeignKey(GlobalIngredient, on_delete=models.SET_NULL)
    quantity = models.CharField(max_length=50, blank=True, null=True) # 400
    unit = models.CharField(max_length=50, blank=True, null=True) # pounds, lbs, oz ,grams, etc
    instructions = models.TextField(blank=True, null=True) # chopped, diced etc.

pantry/models.py:

from recipes.models import IngredientToRecipe

User = settings.AUTH_USER_MODEL 

class pantryIngredients(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    ingredients = models.ForeignKey(IngredientToRecipe, on_delete=models.SET_NULL)
    inStock = = models.IntegerField(default=0, blank=False) # user can increment i.e. two chicken in stock

解决您问题中前三个要求的一种方法是将继承构建到您的模型中。

class Recipe(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    recipeName = models.CharField(max_length=220) # grilled chicken pasta
    ingredients = models.ManyToManyField(Ingredient, blank=True, Null=True, through='IngredientToRecipe')

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

class GlobalIngredient(Ingredient):
    pass

class UserCreatedIngredient(Ingredient):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

class IngredientToRecipe(models.Model):
    ingredient = models.ForeignKey(Ingredient, on_delete=models.SET_NULL)
    quantity = models.CharField(max_length=50, blank=True, null=True) # 400
    unit = models.CharField(max_length=50, blank=True, null=True) # pounds, lbs, oz ,grams, etc
    instructions = models.TextField(blank=True, null=True) # chopped, diced etc.

通过允许发生这种继承,您可以改进数据冗余。