Skip to content

Commit 1912750

Browse files
committed
fix: ingredients mess on recipe editing
1 parent 89cb62c commit 1912750

File tree

2 files changed

+25
-22
lines changed

2 files changed

+25
-22
lines changed

backend/foodgram/foodapp/serializers.py

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
from django.contrib.auth import get_user_model
55
from django.core.files.base import ContentFile
6+
from django.shortcuts import get_object_or_404
67
from rest_framework import serializers
78

89
from .constants import (DEFAULT_RECIPES_AMOUNT_AT_SUBSCRIPTIONS_PAGE,
@@ -267,22 +268,33 @@ def create(self, validated_data):
267268
return recipe
268269

269270
def update(self, instance, validated_data):
271+
with open('debug.log', 'a') as f:
272+
f.write("\n\n--- New Update ---\n")
273+
f.write(
274+
f"Recipe ingredients: "
275+
f"{validated_data.get('recipe_ingredients')}\n")
270276
if 'tags' not in validated_data:
271277
raise serializers.ValidationError({'tags': 'Обязательное поле.'})
272-
else:
273-
instance.tags.set(validated_data.pop('tags'))
274278
if 'recipe_ingredients' not in validated_data:
275-
raise serializers.ValidationError({'tags': 'Обязательное поле.'})
276-
else:
277-
ingredients = validated_data.pop('recipe_ingredients')
278-
instance.recipe_ingredients.all().delete()
279-
for ingredient in ingredients:
280-
ingredient_instance = Ingredient.objects.get(
281-
id=ingredient['id'])
282-
RecipeIngredient.objects.create(recipe=instance,
283-
ingredient=ingredient_instance,
284-
amount=ingredient['amount'])
285-
return super().update(instance, validated_data)
279+
raise serializers.ValidationError(
280+
{'ingredients': 'Обязательное поле.'})
281+
instance.name = validated_data.get('name', instance.name)
282+
instance.image = validated_data.get('image', instance.image)
283+
instance.text = validated_data.get('text', instance.text)
284+
instance.cooking_time = validated_data.get('cooking_time',
285+
instance.cooking_time)
286+
instance.tags.clear()
287+
instance.tags.set(validated_data.pop('tags'))
288+
recipe_ingredients = validated_data.pop('recipe_ingredients')
289+
instance.recipe_ingredients.all().delete()
290+
RecipeIngredient.objects.bulk_create([
291+
RecipeIngredient(
292+
recipe=instance,
293+
ingredient=get_object_or_404(Ingredient,
294+
id=ingredient['id']),
295+
amount=ingredient['amount']
296+
) for ingredient in recipe_ingredients])
297+
return instance
286298

287299

288300
class RecipeShortSerializer(serializers.ModelSerializer):

backend/foodgram/foodgram/asgi.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,3 @@
1-
"""
2-
ASGI config for foodgram project.
3-
4-
It exposes the ASGI callable as a module-level variable named ``application``.
5-
6-
For more information on this file, see
7-
https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/
8-
"""
9-
101
import os
112

123
from django.core.asgi import get_asgi_application

0 commit comments

Comments
 (0)