Ошибка при получении POST запроса и загрузке в базу данных из формы Django
from django.shortcuts import render, redirect
from django.views.decorators.csrf import csrf_exempt
from .forms import FoodForm
from .models import Recipe
def index(request):
card_info = Recipe.objects.all()
return render(request, "food/main.html", {"cards": card_info})
@csrf_exempt
def create(request):
form = FoodForm()
if request.method == "POST":
form = FoodForm(request.POST)
if form.is_valid():
form.save()
return redirect("main")
else:
return render(request, "food/test.html")
context = {
"form": form
}
return render(request, "food/crate.html", context)
Столкнулся с проблемой при вводе данных в форму. В базу данных ничего не добавляется, хотя в терминале ошибок нет (но POST запрос не подсвечивается зеленым, прилагаю скриншот) . Создал "else:return render(request, "food/test.html ")" для проверки ошибки, перерыл уже пол интернета, не могу понять в чем ошибка (есть предположение, что дело в добавлении изображения) Исправляю все файлы.
models.py
from django.db import models
class Recipe(models.Model):
recipe_title = models.CharField(max_length=20)
recipe_time = models.IntegerField()
recipe_ingridients = models.IntegerField()
author_name = models.CharField(max_length=30)
image = models.FileField(upload_to='')
recipe = models.TextField(max_length=300)
forms.py
from django.forms import ModelForm, TextInput, Textarea, NumberInput, FileInput
from .models import Recipe
class FoodForm(ModelForm):
class Meta:
model = Recipe
fields = ["recipe_title", "recipe", "recipe_time", "recipe_ingridients", "author_name", "image"]
widgets = {
"recipe_title" : TextInput(
attrs={
"class" : "title_form",
"placeholder" : "Введите название рецепта"
}
),
"recipe": Textarea(
attrs={
"class": "form_of_all",
"placeholder": "Введите ваш рецепт"
}
),
"recipe_time" : NumberInput(
attrs={
"class" : "ingr",
"placeholder" : "Введите время"
}
),
"recipe_ingridients": NumberInput(
attrs={
"class": "ingr",
"placeholder": "Введите кол-во ингридиентов"
}
),
"author_name" : TextInput(
attrs={
"placeholder" : "enter quthor name"
}
),
"image" : FileInput(
attrs={
'type' : "file",
'name' : "input__file",
'id' : "input__file"
}
)
}
html
{% extends 'food/crate_base.html' %}
{% load static %}
{% block content %}
<div class = "body_of_content">
<span class = "text_">Создать Рецепт</span>
<div class = "back1"><img src = "{% static 'images_defolt/back1.png' %}" class = "first_img"></div>
<div class = "back2"><img src = "{% static 'images_defolt/back1.png' %}" class = "first_img"></div>
<form method="post" >
{% csrf_token %}
{{ form.recipe_title }}<br>
{{ form.recipe }}<br>
{{ form.recipe_time }}<br>
{{ form.recipe_ingridients}}<br>
{{ form.author_name }}<br>
<label for="input__file" class="input__file-button">
{{ form.image }}
<span class="input__file-icon-wrapper"><img class="input__file-icon" src="{% static 'images_defolt/down.png' %}" alt="Выбрать файл" width="25"></span>
<span class="input__file-button-text">Выберите файл</span>
</label>
<button class = "create_btn" type = "submit">Создать</button>
</form>
</div>
{% endblock %}
html из макета
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="crate_css.css">
<title>HTML5</title>
</head>
<body>
<div class = "content">
<div class = "nav_div">
<div class="nav">
<li><button class = "nav_btn">Рецепты</button></li>
<li><button class = "nav_btn">Избранное</button></li>
</div>
</div>
<div class = "body_of_content">
<span class = "text_">Создать Рецепт</span>
<div class = "back1"><img src = "images/back1.png" class = "first_img"></div>
<div class = "back2"><img src = "images/back1.png" class = "first_img"></div>
<input type = "text" placeholder="Введите название рецепта" class = "title_form"><br>
<textarea placeholder = "Введите рецепт" class = "form_of_all"></textarea><br>
<input type = "number" class = "ingr" placeholder="Введите время"><br>
<input type = "number" placeholder = "Введите кол-во ингридиентов" class = "ingr"><br>
<label for="input__file" class="input__file-button">
<input type = "file" name = "input__file" id = "input__file" required>
<span class="input__file-icon-wrapper"><img class="input__file-icon" src="images/down.png" alt="Выбрать файл" width="25"></span>
<span class="input__file-button-text">Выберите файл</span>
</label>
<button class = "create_btn">Создать</button>
</div>
</div>
</body>
</html>
views.py
from django.shortcuts import render, redirect
from django.views.decorators.csrf import csrf_exempt
from .forms import FoodForm
from .models import Recipe
def index(request):
card_info = Recipe.objects.all()
return render(request, "food/main.html", {"cards": card_info})
@csrf_exempt
def create(request):
form = FoodForm()
if request.method == "POST":
form = FoodForm(request.POST)
if form.is_valid():
form.save()
return redirect("main")
else:
return render(request, "food/test.html")
context = {
"form": form
}
return render(request, "food/crate.html", context)
Исправьте enctype формы на multipart/form-data, например
<form method=‘post’ enctype=‘multipart/form-data’>