def post(self, request, id): context = {} recipe = Recipe.objects.get(id=id) recipe_instance = recipe user = request.user IngredientFormSet = modelformset_factory( Ingredient, fields=('name', 'unit', 'quantity'), extra=1) ingredients = IngredientFormSet( queryset=Ingredient.objects.filter(recipe=recipe)) if request.method == 'POST': formset = IngredientFormSet(request.POST) recipe_form = RecipeForm(request.POST, instance=recipe) if recipe_form.is_valid(): recipe = recipe_form.save(commit=False) recipe.creator = user cleaned_time = clean_time(self, request) recipe.time = cleaned_time recipe.save() if formset.is_valid(): forms = formset.save(commit=False) for form in forms: form.recipe = recipe_instance form.save() return redirect('main:recipe_details', id) return redirect('main/recipes.html')
def post(self, request): context = {} # Makes a model formset based off of the Ingredient Model IngredientFormSet = modelformset_factory( Ingredient, fields=('name', 'unit', 'quantity'), extra=2) # sets the queryset to none so it isn't pulling in all ingredients ingredients = IngredientFormSet(queryset=Ingredient.objects.none()) context['form'] = RecipeForm context['ingredients'] = ingredients if request.method == 'POST': formset = IngredientFormSet(request.POST) recipe_form = RecipeForm(request.POST) if recipe_form.is_valid(): recipe = recipe_form.save(commit=False) recipe.creator = request.user cleaned_time = clean_time(self, request) recipe.time = cleaned_time recipe.save() if formset.is_valid(): forms = formset.save(commit=False) for form in forms: form.recipe = recipe form.save() else: context['ingredient_errors'] = formset.errors formset = IngredientFormSet() else: context['form'] = recipe_form context['ingredients'] = formset context['recipe_errors'] = recipe_form.errors return render(request, 'main/create-recipe.html', context)
def update_recipe(request,pk): recipe=get_object_or_404(Recipe,pk=pk) if request.user == recipe.user: ImageFormSet=modelformset_factory(Image,form=ImageForm,max_num=5) recipe_form=RecipeForm(request.POST or None,instance=recipe) formset=ImageFormSet(request.POST or None,request.FILES or None,queryset=Image.objects.filter(recipe=recipe)) if recipe_form.is_valid() and formset.is_valid(): recipe=recipe_form.save() for form in formset: image=form.save(commit=False) image.recipe=recipe image.save() return redirect(recipe.get_absolute_url()) return render(request,'update-recipe.html',locals()) else: return HttpResponse('<h1>403 Forbidden</h1>')
def add_recipe(request): ImageFormSet=modelformset_factory(Image,form=ImageForm,max_num=5) if request.method=='POST': recipe_form=RecipeForm(request.POST) formset=ImageFormSet(request.POST,request.FILES,queryset=Image.objects.none()) if recipe_form.is_valid() and formset.is_valid() : recipe=recipe_form.save(commit=False) recipe.user = request.user recipe.save() for form in formset.cleaned_data: image=form['image'] Image.objects.create(image=image,recipe=recipe) return redirect(recipe.get_absolute_url()) else: recipe_form=RecipeForm() formset=ImageFormSet(queryset=Image.objects.none()) return render(request,'add-recipe.html',locals())
def test_invalid_duplicate_name(self): """ Create recipe which will be occupying chosen name to trigger clean_recipe_name """ User.objects.create_superuser('Necessary Evil', '*****@*****.**', 'SomeP5WD-40') Recipe(recipe_name=self.default_data['recipe_name'], accepted=True, preparation_time=50, recipe_image='tree.JPG', directions='blablablab').save() form = RecipeForm(data=self.default_data, files=self.files, collect_ing=[]) self.assertFalse(form.is_valid()) self.assertIn( 'This title has already been used. Please type another one.', dict(form.errors)['recipe_name'])
def test_valid_recipe_form(self): form = RecipeForm(data=self.default_data, files=self.files, collect_ing=[]) self.assertTrue(form.is_valid())