diff --git a/recipes/views.py b/recipes/views.py index d1a63a0..be05926 100644 --- a/recipes/views.py +++ b/recipes/views.py @@ -6,6 +6,10 @@ from django.urls import reverse from django.http.response import HttpResponseRedirect from django.conf import settings +RECIPE_FORM_PREFIX = 'recipe' +VERSION_FORM_PREFIX = 'version' +INGREDIENTS_FORMSET_PREFIX = 'ingredient' + def get_name_of_user(user): return user.first_name if user.first_name else user.username @@ -32,9 +36,17 @@ def recipe(request, slug): else: return render(request, 'recipe.html', context={'recipe': recipe, 'versions': versions}) -RECIPE_FORM_PREFIX = 'recipe' -VERSION_FORM_PREFIX = 'version' -INGREDIENTS_FORMSET_PREFIX = 'ingredient' +def create_version(request, recipe: Recipe, version_form: VersionForm) -> Version: + version = version_form.save(commit=False) + version.user = request.user + version.recipe = recipe + version.save() + return version + +def save_ingredients(version: Version, ingredients_formset: IngredientFormSet): # type: ignore + for ingredient in ingredients_formset.save(commit=False): + ingredient.version = version + ingredient.save() @login_required def add_recipe(request): @@ -45,15 +57,8 @@ def add_recipe(request): if recipe_form.is_valid() and version_form.is_valid() and ingredients_formset.is_valid(): recipe = recipe_form.save(commit=True) - - version = version_form.save(commit=False) - version.user = request.user - version.recipe = recipe - version.save() - - for ingredient in ingredients_formset.save(commit=False): - ingredient.version = version - ingredient.save() + version = create_version(request, recipe, version_form) + save_ingredients(version, ingredients_formset) return HttpResponseRedirect(reverse('recipe', kwargs={'slug': recipe.slug})) else: @@ -92,14 +97,8 @@ def add_version(request, slug): version_form.recipe_id = recipe.id # type: ignore if version_form.is_valid() and ingredients_formset.is_valid(): - version = version_form.save(commit=False) - version.user = request.user - version.recipe = recipe - version.save() - - for ingredient in ingredients_formset.save(commit=False): - ingredient.version = version - ingredient.save() + version = create_version(request, recipe, version_form) + save_ingredients(version, ingredients_formset) return HttpResponseRedirect(reverse('version', kwargs={'slug_recipe': version.recipe.slug, 'slug_version': version.slug}))