diff --git a/recipes/forms.py b/recipes/forms.py
index 95dbac5..f02cf4d 100644
--- a/recipes/forms.py
+++ b/recipes/forms.py
@@ -1,6 +1,11 @@
from django.forms import ModelForm, ValidationError, modelformset_factory, BooleanField
from .models import Recipe, Version, Ingredient
+class RecipeForm(ModelForm):
+ class Meta:
+ model = Recipe
+ fields = ['title', 'slug']
+
class VersionForm(ModelForm):
recipe_id: int
diff --git a/recipes/templates/add-recipe.html b/recipes/templates/add-recipe.html
new file mode 100644
index 0000000..bd8968c
--- /dev/null
+++ b/recipes/templates/add-recipe.html
@@ -0,0 +1,41 @@
+{% extends "base_main.html" %}
+{% block title %}{{ recipe.title }}{% endblock %}
+{% block main %}
+
+
+
+
+{% endblock %}
diff --git a/recipes/templates/recipes.html b/recipes/templates/recipes.html
index a60027c..33273b0 100644
--- a/recipes/templates/recipes.html
+++ b/recipes/templates/recipes.html
@@ -3,7 +3,7 @@
{% block main %}
Recipes
{% if perms.recipes.add_recipe %}
-Add recipe
+Add recipe
{% endif %}
{% if perms.recipes.view_recipe %}
diff --git a/recipes/urls.py b/recipes/urls.py
index fbd5548..8fdae09 100644
--- a/recipes/urls.py
+++ b/recipes/urls.py
@@ -3,6 +3,7 @@ from . import views
urlpatterns = [
path('', views.recipes, name='recipes'),
+ path('add-recipe/', views.add_recipe, name='add-recipe'),
path('/add-version/', views.add_version, name='add-version'),
path('//edit-version/', views.edit_version, name='edit-version'),
path('//', views.version, name='version'),
diff --git a/recipes/views.py b/recipes/views.py
index 8f18dd6..b90df8a 100644
--- a/recipes/views.py
+++ b/recipes/views.py
@@ -1,6 +1,6 @@
from django.shortcuts import render, get_object_or_404
from .models import Recipe, Version, Ingredient
-from .forms import VersionForm, IngredientFormSet
+from .forms import RecipeForm, VersionForm, IngredientFormSet
from django.contrib.auth.decorators import login_required, permission_required
from django.urls import reverse
from django.http.response import HttpResponseRedirect
@@ -36,8 +36,36 @@ 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'
+INGREDIENTS_FORMSET_PREFIX = 'ingredient' # TODO refactor author_placeholder argument
+
+@login_required
+def add_recipe(request):
+ if request.method == 'POST':
+ recipe_form = RecipeForm(request.POST, prefix=RECIPE_FORM_PREFIX)
+ version_form = VersionForm(request.POST, prefix=VERSION_FORM_PREFIX, author_placeholder=request.user.first_name if request.user.first_name else request.user.username)
+ ingredients_formset = IngredientFormSet(request.POST, queryset=Ingredient.objects.none(), prefix=INGREDIENTS_FORMSET_PREFIX)
+
+ 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()
+
+ return HttpResponseRedirect(reverse('recipe', kwargs={'slug': recipe.slug}))
+ else:
+ recipe_form = RecipeForm(prefix=RECIPE_FORM_PREFIX)
+ version_form = VersionForm(prefix=VERSION_FORM_PREFIX, author_placeholder=request.user.first_name if request.user.first_name else request.user.username)
+ ingredients_formset = IngredientFormSet(queryset=Ingredient.objects.none(), prefix=INGREDIENTS_FORMSET_PREFIX)
+
+ return render(request, 'add-recipe.html', {'recipe_form': recipe_form, 'version_form': version_form, 'ingredients_formset': ingredients_formset})
@login_required
@permission_required('recipes.add_recipe')