Мой код Class Based View(Django) не может распознать идентификатор из базы данных SQL
Я пытался сделать учебный проект с формами. Я хотел создать код для обновления отзывов в форме с помощью Class Based Views. views.py
class UpdateFeedbackView(View):
def get(self, request, id_feedback):
feed = get_object_or_404(Feedback, id=id_feedback)
form = FeedbackForm(instance=feed)
return render(request, 'form_project/feedback.html', context={'form': form})
def post(self, request, id_feedback):
feed = get_object_or_404(Feedback, id=id_feedback)
form = FeedbackForm(request.POST, instance=feed)
if form.is_valid():
form.save()
return HttpResponseRedirect(f'/{id_feedback}')
else:
form = FeedbackForm(instance=feed)
return render(request, 'form_project/feedback.html', context={'form': form})
urls.py
path('<int:id_feedback>', views.UpdateFeedbackView.as_view())
html
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="{% static 'feedback/field.css'%}">
</head>
<body>
<h2>Оставьте отзыв</h2>
<form method="post">
{% csrf_token %}
{% for field in form %}
<div class="form-style">
{{ field.errors }}
{{ field.label_tag }}
{{ field }}
</div>
{% endfor %}
<button type="submit">Отправить</button>
</form>
</body>
</html>
Когда я пытаюсь ввести идентификатор отзыва, я получаю эту ошибку
TemplateDoesNotExist at /1
Код считает, что id не существует. Однако я попытался написать тот же код обновления с помощью простой функции, и он заработал. С помощью отладчика я понял, что проблема в методе GET, но не могу понять почему.
Что я сделал не так или упустил?
filetree: введите описание изображения здесь
Ваш шаблон form_project/feedback.html
, скорее всего, помещен не в ту директорию. Его следует переместить в каталог app_name/templates/form_project/feedback.html
.
Однако ваше представление реализует много шаблонного кода и эквивалентно UpdateView
[Django-doc]:
from django.urls import reverse_lazy
from django.views.generic import UpdateView
class UpdateFeedbackView(UpdateView):
template_name = 'form_project/feedback.html'
def get_success_url(self):
return reverse('update_feed', kwargs={'pk': self.object.pk})
с url:
path('<int:pk>', views.UpdateFeedbackView.as_view(), name='update_feed'),