Как правильно удалить экземпляр модели в Django
Я пытаюсь удалить экземпляр события из моего календаря. Затем я хочу, чтобы Django перенаправлял на страницу календаря после удаления события.
В моем файле views.py я определил функцию event_delete:
def event_delete(request, event_id=None):
Event.objects.get(pk=event_id).delete()
return HttpResponseRedirect(reverse("cal:calendar"))
В моем urls.py я определил url для удаления:
from django.conf.urls import url
from . import views
app_name = "cal"
urlpatterns = [
url(r"^index/$", views.index, name="index"),
url(r"^calendar/$", views.CalendarView.as_view(), name="calendar"),
url(r"^event/new/$", views.event, name="event_new"),
url(r"^event/edit/(?P<event_id>\d+)/$", views.event, name="event_edit"),
url(r"^event/delete/$", views.event_delete, name="event_delete"),
]
и в моем файле event.html я определил тег a, который принимает event_delete:
<a class="btn cancel-button buttons login_btn" href="{% url 'cal:event_delete' %}" value="Delete" style="font-family:Optima;">Delete Event</a>
Когда я пытаюсь удалить событие, оно перенаправляет меня обратно на страницу календаря, но я все еще вижу событие. При повторной попытке выдает ошибку
DoesNotExist at /event/delete/
Event matching query does not exist.
Когда я проверяю в своем администраторе, я все еще вижу экземпляр события. Пожалуйста, посоветуйте, как я могу решить эту проблему.
href="{% url 'cal:event_delete' %}"
Здесь вы не указали id события для удаления, поэтому это не может сработать. Возможно, для решения вашей проблемы будет достаточно изменить следующий вариант:
href="{% url 'cal:event_delete' event.id %}"
(при условии, что экземпляр события находится в переменной event
в вашем шаблоне)