"delete"
не является допустимым типом для элемента управления формы HTML. Вам нужно изменить его на "submit"
(поскольку вы все еще хотите отправить форму).
Вам нужно будет создать две кнопки с одинаковым именем и разными значениями, например так:
<button type="submit" name="submit" value="submit" class="save btn btn-default">Save</button>
<p>Click the button below to delete this listing. No second warning is given, once you click delete it will be
removed.</p>
<button type="submit" name="submit" value="delete" class="delete btn btn-default">delete</button>
Затем вы можете проверить в своем представлении, была ли нажата кнопка удаления, например:
def post_edit(request, pk):
post = get_object_or_404(Listing, pk=pk)
if request.method == "POST":
if request.POST.get('submit') == 'delete':
post.delete()
return redirect('listings')
form = ListingForm(request.POST, instance=post)
if form.is_valid():
post = form.save(commit=False)
post.save()
return redirect('post_view', pk=post.pk)
else:
form = ListingForm(instance=post)
return render(request, 'post_edit.html', {'form': form})
Обратите внимание, что я перемещаю чек для кнопки удаления внутрь if request.method == "POST":
block, по двум причинам:
Вам нужно будет проверять значения POST, только если это на самом деле метод post.
Существуетне нужно редактировать сообщение, а затем удалять его.