mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2026-01-03 13:19:16 -05:00
Add basic output for nutritions.
This commit is contained in:
@@ -175,7 +175,7 @@ admin.site.register(ShareLink, ShareLinkAdmin)
|
|||||||
|
|
||||||
|
|
||||||
class NutritionInformationAdmin(admin.ModelAdmin):
|
class NutritionInformationAdmin(admin.ModelAdmin):
|
||||||
list_display = ('recipe', 'created_by', 'created_at',)
|
list_display = ('created_by', 'created_at',)
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(NutritionInformation, NutritionInformationAdmin)
|
admin.site.register(NutritionInformation, NutritionInformationAdmin)
|
||||||
@@ -196,7 +196,7 @@ admin.site.register(NutritionType, NutritionTypeAdmin)
|
|||||||
|
|
||||||
|
|
||||||
class NutritionValueAdmin(admin.ModelAdmin):
|
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)
|
admin.site.register(NutritionValue, NutritionValueAdmin)
|
||||||
|
|||||||
@@ -181,6 +181,45 @@ class Step(models.Model):
|
|||||||
ordering = ['order', 'pk']
|
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):
|
class Recipe(models.Model):
|
||||||
name = models.CharField(max_length=128)
|
name = models.CharField(max_length=128)
|
||||||
image = models.ImageField(upload_to='recipes/', blank=True, null=True)
|
image = models.ImageField(upload_to='recipes/', blank=True, null=True)
|
||||||
@@ -194,6 +233,7 @@ class Recipe(models.Model):
|
|||||||
working_time = models.IntegerField(default=0)
|
working_time = models.IntegerField(default=0)
|
||||||
waiting_time = models.IntegerField(default=0)
|
waiting_time = models.IntegerField(default=0)
|
||||||
internal = models.BooleanField(default=False)
|
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_by = models.ForeignKey(User, on_delete=models.PROTECT)
|
||||||
created_at = models.DateTimeField(auto_now_add=True)
|
created_at = models.DateTimeField(auto_now_add=True)
|
||||||
updated_at = models.DateTimeField(auto_now=True)
|
updated_at = models.DateTimeField(auto_now=True)
|
||||||
@@ -361,43 +401,3 @@ class ViewLog(models.Model):
|
|||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.recipe.name
|
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}'
|
|
||||||
|
|||||||
@@ -205,6 +205,17 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% if recipe.nutrition %}
|
||||||
|
<div>
|
||||||
|
<hr>
|
||||||
|
<h3>{% trans 'Nutrition' %}</h3>
|
||||||
|
{% for n in recipe.nutrition.nutritions.all %}
|
||||||
|
{{ n.type.type }}: {{ n.value|floatformat:2 }} {{ n.type.unit.short }}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
<div v-if="recipe !== undefined && recipe.steps.length > 0">
|
<div v-if="recipe !== undefined && recipe.steps.length > 0">
|
||||||
<hr>
|
<hr>
|
||||||
<h3>{% trans 'Instructions' %}</h3>
|
<h3>{% trans 'Instructions' %}</h3>
|
||||||
@@ -472,7 +483,8 @@
|
|||||||
this.$http.get("{% url 'api:recipe-detail' recipe.pk %}" {% if share %}
|
this.$http.get("{% url 'api:recipe-detail' recipe.pk %}" {% if share %}
|
||||||
+ "?share={{ share }}"{% endif %}).then((response) => {
|
+ "?share={{ share }}"{% endif %}).then((response) => {
|
||||||
this.recipe = response.data;
|
this.recipe = response.data;
|
||||||
this.loading = false
|
console.log(this.recipe);
|
||||||
|
this.loading = false;
|
||||||
|
|
||||||
for (let step of this.recipe.steps) {
|
for (let step of this.recipe.steps) {
|
||||||
if (step.ingredients.length > 0) {
|
if (step.ingredients.length > 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user