Почему этот 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>

Больше информации можно найти в документации.

Вернуться на верх