Почему этот DeleteView на самом деле не удаляет запись в Django?
В моем приложении Django представление удаления не работает. Когда я нажимаю на запись, страница просто обновляется и ничего не происходит. Запись не удаляется из базы данных. Создание и обновление записей работает нормально. Может быть, что-то не так с каким-то из файлов?
microtarjetas/views.py:
class DeleteCardView(DeleteView):
model = Card
template_name = 'microtarjetas/delete_card.html'
form_class = CardForm
success_url = '/cards/'
templates/microtarjetas/delete_card.html:
{% extends 'base.html' %} {% load static %} {% block content %}
<h2>Delete card</h2>
<p>Are you sure you want to delete "{{ object }}"?</p>
<form method="post">{% csrf_token %}
<input type="submit" value="Confirm" />
</form>
{% endblock %}
фрагмент из templates/microtarjetas/cards.html:
<tbody>
{% for card in cards %}
<tr>
<td>{{ card.word_en }}</td>
<td>{{ card.word_es }}</td>
<td><a href="{% url 'update_card' card.pk %}">update</a></td>
<td><a href="{% url 'delete_card' card.pk %}">X</a></td>
</tr>
{% endfor %}
</tbody>
forms.py:
from django import forms
from .models import Card
class CardForm(forms.ModelForm):
class Meta:
model = Card
fields = "__all__"
models.py:
class Card(models.Model):
word_en = models.CharField(max_length = 30)
word_es = models.CharField(max_length = 30)
def get_absolute_url(self):
return "/cards"
def __str__(self):
return f"{self.word_en} --- {self.word_es}"
urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('', views.HomeView.as_view(), name='home'),
path('cards/', views.CardsView.as_view(), name='cards'),
path('cards/new', views.CreateCardView.as_view(), name='create_card'),
path('cards/<pk>/delete/', views.DeleteCardView.as_view(), name='delete_card'),
path('cards/<pk>/update/', views.UpdateCardView.as_view(), name='update_card'),
]
Любопытно, что если я добавлю тег {{ form }} к форме delete_card.html, она работает (хотя при этом в форму добавляются два поля ввода, которые не нужны).
Вы не отправляете форму с данными формы. Вам следует обновить код следующим образом:
<form method="post">{% csrf_token %}
{{ form }}
<input type="submit" value="Confirm" />
</form>
Больше информации можно найти в документации.