diff --git a/cookbook/admin.py b/cookbook/admin.py index 7a93b08b8..7a3c68274 100644 --- a/cookbook/admin.py +++ b/cookbook/admin.py @@ -175,7 +175,7 @@ admin.site.register(ShareLink, ShareLinkAdmin) class NutritionInformationAdmin(admin.ModelAdmin): - list_display = ('recipe', 'created_by', 'created_at',) + list_display = ('created_by', 'created_at',) admin.site.register(NutritionInformation, NutritionInformationAdmin) @@ -196,7 +196,7 @@ admin.site.register(NutritionType, NutritionTypeAdmin) class NutritionValueAdmin(admin.ModelAdmin): - list_display = ('information', 'value', 'type', 'created_by', 'created_at',) + list_display = ('value', 'type', 'created_by', 'created_at',) admin.site.register(NutritionValue, NutritionValueAdmin) diff --git a/cookbook/models.py b/cookbook/models.py index 16923c22d..fae56f362 100644 --- a/cookbook/models.py +++ b/cookbook/models.py @@ -181,6 +181,45 @@ class Step(models.Model): ordering = ['order', 'pk'] +class NutritionUnit(models.Model): + name = models.CharField(max_length=128) + short = models.CharField(max_length=16) + created_by = models.ForeignKey(User, on_delete=models.CASCADE) + created_at = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return f'{self.name} ({self.short})' + + +class NutritionType(models.Model): + type = models.CharField(max_length=128) + unit = models.ForeignKey(NutritionUnit, on_delete=models.CASCADE) + created_by = models.ForeignKey(User, on_delete=models.CASCADE) + created_at = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return f'{self.type}' + + +class NutritionValue(models.Model): + type = models.ForeignKey(NutritionType, on_delete=models.CASCADE) + value = models.DecimalField(max_digits=32, decimal_places=16) + created_by = models.ForeignKey(User, on_delete=models.CASCADE) + created_at = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return f'{self.value} {self.type}' + + +class NutritionInformation(models.Model): + nutritions = models.ManyToManyField(NutritionValue) + created_by = models.ForeignKey(User, on_delete=models.CASCADE) + created_at = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return f'Nutrition' + + class Recipe(models.Model): name = models.CharField(max_length=128) image = models.ImageField(upload_to='recipes/', blank=True, null=True) @@ -194,6 +233,7 @@ class Recipe(models.Model): working_time = models.IntegerField(default=0) waiting_time = models.IntegerField(default=0) internal = models.BooleanField(default=False) + nutrition = models.ForeignKey(NutritionInformation, blank=True, null=True, on_delete=models.PROTECT) created_by = models.ForeignKey(User, on_delete=models.PROTECT) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) @@ -361,43 +401,3 @@ class ViewLog(models.Model): def __str__(self): return self.recipe.name - - -class NutritionInformation(models.Model): - recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE) - created_by = models.ForeignKey(User, on_delete=models.CASCADE) - created_at = models.DateTimeField(auto_now_add=True) - - def __str__(self): - return f'Nutrition {self.recipe}' - - -class NutritionUnit(models.Model): - name = models.CharField(max_length=128) - short = models.CharField(max_length=16) - created_by = models.ForeignKey(User, on_delete=models.CASCADE) - created_at = models.DateTimeField(auto_now_add=True) - - def __str__(self): - return f'{self.name} ({self.short})' - - -class NutritionType(models.Model): - type = models.CharField(max_length=128) - unit = models.ForeignKey(NutritionUnit, on_delete=models.CASCADE) - created_by = models.ForeignKey(User, on_delete=models.CASCADE) - created_at = models.DateTimeField(auto_now_add=True) - - def __str__(self): - return f'{self.type}' - - -class NutritionValue(models.Model): - information = models.ForeignKey(NutritionInformation, on_delete=models.CASCADE) - type = models.ForeignKey(NutritionType, on_delete=models.CASCADE) - value = models.DecimalField(max_digits=32, decimal_places=16) - created_by = models.ForeignKey(User, on_delete=models.CASCADE) - created_at = models.DateTimeField(auto_now_add=True) - - def __str__(self): - return f'{self.value} {self.type}' diff --git a/cookbook/templates/recipe_view.html b/cookbook/templates/recipe_view.html index d20d0c69b..f378afcdb 100644 --- a/cookbook/templates/recipe_view.html +++ b/cookbook/templates/recipe_view.html @@ -205,6 +205,17 @@ {% endif %} + {% if recipe.nutrition %} +