From e5b7cf5f307870002caf1b0f43af812d3be7b89b Mon Sep 17 00:00:00 2001 From: vabene1111 Date: Tue, 19 Jan 2021 21:41:52 +0100 Subject: [PATCH] further improvised import/export feature --- cookbook/serializer.py | 16 ++++++++++++++++ cookbook/views/import_export.py | 11 ++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/cookbook/serializer.py b/cookbook/serializer.py index 50227f7e6..325344618 100644 --- a/cookbook/serializer.py +++ b/cookbook/serializer.py @@ -189,6 +189,17 @@ class StepSerializer(WritableNestedModelSerializer): ) +# used for the import export. temporary workaround until that module is finally fixed +class StepExportSerializer(WritableNestedModelSerializer): + ingredients = IngredientSerializer(many=True) + + class Meta: + model = Step + fields = ( + 'id', 'name', 'type', 'instruction', 'ingredients', 'time', 'order', 'show_as_header' + ) + + class NutritionInformationSerializer(serializers.ModelSerializer): class Meta: model = NutritionInformation @@ -227,6 +238,11 @@ class RecipeSerializer(WritableNestedModelSerializer): return super().create(validated_data) +# used for the import export. temporary workaround until that module is finally fixed +class RecipeExportSerializer(RecipeSerializer): + steps = StepExportSerializer(many=True) + + class RecipeImageSerializer(WritableNestedModelSerializer): class Meta: model = Recipe diff --git a/cookbook/views/import_export.py b/cookbook/views/import_export.py index e2ad1e898..2d61e03b3 100644 --- a/cookbook/views/import_export.py +++ b/cookbook/views/import_export.py @@ -14,7 +14,7 @@ from rest_framework.renderers import JSONRenderer from cookbook.forms import ExportForm, ImportForm from cookbook.helper.permission_helper import group_required from cookbook.models import Recipe -from cookbook.serializer import RecipeSerializer +from cookbook.serializer import RecipeSerializer, RecipeExportSerializer @group_required('user') @@ -24,10 +24,10 @@ def import_recipe(request): if form.is_valid(): try: data = json.loads( - re.sub(r'"id":([0-9])+,', '', form.cleaned_data['recipe']) + re.sub(r'"id":([0-9]+),', '', re.sub(r',(\s)*"recipe":([0-9]+)', '', form.cleaned_data['recipe'])) ) - sr = RecipeSerializer(data=data, context={'request': request}) + sr = RecipeExportSerializer(data=data, context={'request': request}) if sr.is_valid(): sr.validated_data['created_by'] = request.user recipe = sr.save() @@ -63,7 +63,8 @@ def import_recipe(request): messages.add_message( request, messages.WARNING, sr.errors ) - except JSONDecodeError: + except JSONDecodeError as e: + print(e) messages.add_message( request, messages.ERROR, @@ -84,7 +85,7 @@ def export_recipe(request): if form.is_valid(): recipe = form.cleaned_data['recipe'] if recipe.internal: - export = RecipeSerializer(recipe).data + export = RecipeExportSerializer(recipe).data if recipe.image and form.cleaned_data['image']: with open(recipe.image.path, 'rb') as img_f: