Для двух ошибок при обновлении просмотра, Django
Сначала я запишу код и объясню его ниже.
views.py
class comment_update(UpdateView):
model = Comment
fields = '__all__'
# success_url = reverse_lazy('board')
def get(self, request, pk):
com = Comment.objects.filter(id=pk)
return render(self.request, 'comment_edit.html',{
'com' : com
})
def get_success_url(self):
return reverse('board_detail', kwargs={'pk':self.object.board.pk})
urls.py
path('board/comment/<int:pk>/update/', views.comment_update.as_view(), name="comment_update")
шаблон
<form action="{% url 'comment_update' i.id %}">
Если я не использую поля в ситуации, как в приведенном выше коде,
Возникает ошибка A. При использовании полей возникает ошибка B. В случае B, почему не работает success_url и get_sufficiency_url?
A Неправильно настроено в /board/comment/4/update/ Использование ModelFormMixin (базовый класс comment_update) без атрибута 'fields' запрещено.
B TemplateDoesNotExist at /board/comment/4/update/ board/comment_form.html
Вы, по сути, обходите всю встроенную в Django функциональность UpdateView
, переопределяя get
.
Не делай этого, ты калечишь себя.
class CommentUpdateView(UpdateView):
model = Comment
fields = '__all__'
context_object_name = 'com'
def get_success_url(self):
return reverse('board_detail', kwargs={'pk':self.object.board.pk})
Достаточно иметь в наличии следующие контекстные переменные:
{% form.as_p %}
{% com %} <-- this is your object (or use 'object')
Также проверьте документацию: https://docs.djangoproject.com/en/3.2/ref/class-based-views/generic-editing/#updateview
Магия, которая добавляет ваш объект в контекст: https://docs.djangoproject.com/en/3.2/ref/class-based-views/mixins-single-object/#singleobjectmixin - или взгляните на его исходный код, это не слишком сложно.