From 2b1cde2efc533db9bb1238e91e60ace74c74145f Mon Sep 17 00:00:00 2001 From: Sebastian Markgraf Date: Fri, 16 Oct 2020 23:44:18 +0200 Subject: [PATCH] Add basic output for nutritions. --- cookbook/admin.py | 4 +- cookbook/models.py | 80 ++++++++++++++--------------- cookbook/templates/recipe_view.html | 14 ++++- 3 files changed, 55 insertions(+), 43 deletions(-) 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 %} +
+
+

{% trans 'Nutrition' %}

+ {% for n in recipe.nutrition.nutritions.all %} + {{ n.type.type }}: {{ n.value|floatformat:2 }} {{ n.type.unit.short }} + {% endfor %} +
+ {% endif %} + +

{% trans 'Instructions' %}

@@ -472,7 +483,8 @@ this.$http.get("{% url 'api:recipe-detail' recipe.pk %}" {% if share %} + "?share={{ share }}"{% endif %}).then((response) => { this.recipe = response.data; - this.loading = false + console.log(this.recipe); + this.loading = false; for (let step of this.recipe.steps) { if (step.ingredients.length > 0) {