diff --git a/cookbook/admin.py b/cookbook/admin.py index ec06a7baa..6fc1d1408 100644 --- a/cookbook/admin.py +++ b/cookbook/admin.py @@ -175,7 +175,7 @@ admin.site.register(ShareLink, ShareLinkAdmin) class NutritionInformationAdmin(admin.ModelAdmin): - list_display = ('id', 'created_by', 'created_at') + list_display = ('id',) admin.site.register(NutritionInformation, NutritionInformationAdmin) diff --git a/cookbook/migrations/0089_auto_20201106_1655.py b/cookbook/migrations/0089_auto_20201117_2222.py similarity index 75% rename from cookbook/migrations/0089_auto_20201106_1655.py rename to cookbook/migrations/0089_auto_20201117_2222.py index ad8be711c..5e5dca9cf 100644 --- a/cookbook/migrations/0089_auto_20201106_1655.py +++ b/cookbook/migrations/0089_auto_20201117_2222.py @@ -1,7 +1,6 @@ -# Generated by Django 3.1.1 on 2020-11-06 15:55 +# Generated by Django 3.1.1 on 2020-11-17 21:22 import datetime -from django.conf import settings from django.db import migrations, models import django.db.models.deletion @@ -9,16 +8,10 @@ import django.db.models.deletion class Migration(migrations.Migration): dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('cookbook', '0088_shoppinglist_finished'), ] operations = [ - migrations.AlterField( - model_name='invitelink', - name='valid_until', - field=models.DateField(default=datetime.date(2020, 11, 20)), - ), migrations.CreateModel( name='NutritionInformation', fields=[ @@ -28,13 +21,16 @@ class Migration(migrations.Migration): ('proteins', models.DecimalField(decimal_places=16, default=0, max_digits=32)), ('calories', models.DecimalField(decimal_places=16, default=0, max_digits=32)), ('source', models.CharField(blank=True, default='', max_length=512, null=True)), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), + migrations.AlterField( + model_name='invitelink', + name='valid_until', + field=models.DateField(default=datetime.date(2020, 12, 1)), + ), migrations.AddField( model_name='recipe', name='nutrition', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='cookbook.nutritioninformation'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='cookbook.nutritioninformation'), ), ] diff --git a/cookbook/models.py b/cookbook/models.py index c8d6f60c7..94205853b 100644 --- a/cookbook/models.py +++ b/cookbook/models.py @@ -188,9 +188,6 @@ class NutritionInformation(models.Model): calories = models.DecimalField(default=0, decimal_places=16, max_digits=32) source = models.CharField(max_length=512, default="", null=True, blank=True) - created_by = models.ForeignKey(User, on_delete=models.CASCADE) - created_at = models.DateTimeField(auto_now_add=True) - def __str__(self): return f'Nutrition' @@ -208,7 +205,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) + nutrition = models.ForeignKey(NutritionInformation, blank=True, null=True, on_delete=models.CASCADE) created_by = models.ForeignKey(User, on_delete=models.PROTECT) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) diff --git a/cookbook/serializer.py b/cookbook/serializer.py index 9ed0170a2..00c12e663 100644 --- a/cookbook/serializer.py +++ b/cookbook/serializer.py @@ -140,13 +140,20 @@ class StepSerializer(WritableNestedModelSerializer): fields = ('id', 'name', 'type', 'instruction', 'ingredients', 'time', 'order', 'show_as_header') +class NutritionInformationSerializer(serializers.ModelSerializer): + class Meta: + model = NutritionInformation + fields = ('carbohydrates', 'fats', 'proteins', 'calories', 'source') + + class RecipeSerializer(WritableNestedModelSerializer): + nutrition = NutritionInformationSerializer(allow_null=True) steps = StepSerializer(many=True) keywords = KeywordSerializer(many=True) class Meta: model = Recipe - fields = ['id', 'name', 'image', 'keywords', 'steps', 'working_time', 'waiting_time', 'created_by', 'created_at', 'updated_at', 'internal'] + fields = ['id', 'name', 'image', 'keywords', 'steps', 'working_time', 'waiting_time', 'created_by', 'created_at', 'updated_at', 'internal', 'nutrition'] read_only_fields = ['image', 'created_by', 'created_at'] @@ -263,8 +270,3 @@ class ViewLogSerializer(serializers.ModelSerializer): class Meta: model = ViewLog fields = '__all__' - -class NutritionInformationSerializer(serializers.ModelSerializer): - class Meta: - model = NutritionInformation - fields = '__all__' \ No newline at end of file diff --git a/cookbook/templates/forms/edit_internal_recipe.html b/cookbook/templates/forms/edit_internal_recipe.html index 2acb7f263..6538d55c0 100644 --- a/cookbook/templates/forms/edit_internal_recipe.html +++ b/cookbook/templates/forms/edit_internal_recipe.html @@ -81,6 +81,34 @@ +
+
+
+
+

{% trans 'Nutrition' %}

+ + + + + + + + + + + + +
+
+
+
+
+ @@ -335,6 +363,8 @@ class="btn btn-info shadow-none">{% trans 'Save' %} + {% trans 'View Recipe' %} {% trans 'Add Step' %} + + {% trans 'View Recipe' %} diff --git a/cookbook/views/api.py b/cookbook/views/api.py index 70cbda08c..e3a2a154b 100644 --- a/cookbook/views/api.py +++ b/cookbook/views/api.py @@ -28,10 +28,10 @@ from rest_framework.viewsets import ViewSetMixin from cookbook.helper.permission_helper import group_required, CustomIsOwner, CustomIsAdmin, CustomIsUser, CustomIsGuest, CustomIsShare from cookbook.helper.recipe_url_import import get_from_html -from cookbook.models import Recipe, Sync, Storage, CookLog, MealPlan, MealType, ViewLog, UserPreference, RecipeBook, Ingredient, Food, Step, Keyword, Unit, SyncLog, ShoppingListRecipe, ShoppingList, ShoppingListEntry, NutritionInformation +from cookbook.models import Recipe, Sync, Storage, CookLog, MealPlan, MealType, ViewLog, UserPreference, RecipeBook, Ingredient, Food, Step, Keyword, Unit, SyncLog, ShoppingListRecipe, ShoppingList, ShoppingListEntry from cookbook.provider.dropbox import Dropbox from cookbook.provider.nextcloud import Nextcloud -from cookbook.serializer import NutritionInformationSerializer, MealPlanSerializer, MealTypeSerializer, RecipeSerializer, ViewLogSerializer, UserNameSerializer, UserPreferenceSerializer, RecipeBookSerializer, IngredientSerializer, FoodSerializer, StepSerializer, \ +from cookbook.serializer import MealPlanSerializer, MealTypeSerializer, RecipeSerializer, ViewLogSerializer, UserNameSerializer, UserPreferenceSerializer, RecipeBookSerializer, IngredientSerializer, FoodSerializer, StepSerializer, \ KeywordSerializer, RecipeImageSerializer, StorageSerializer, SyncSerializer, SyncLogSerializer, UnitSerializer, ShoppingListSerializer, ShoppingListRecipeSerializer, ShoppingListEntrySerializer, ShoppingListEntryCheckedSerializer, \ ShoppingListAutoSyncSerializer @@ -282,10 +282,6 @@ class ViewLogViewSet(viewsets.ModelViewSet): queryset = ViewLog.objects.filter(created_by=self.request.user).all()[:5] return queryset -class NutritionInformationViewSet(viewsets.ModelViewSet): - queryset = NutritionInformation.objects.all() - serializer_class = NutritionInformationSerializer - # -------------- non django rest api views --------------------