我的删除视图出现"无反向匹配"错误



我得到一个NoReverseMatch错误与我的删除视图。我认为这是我的成功url在我的视图。py,但我不知道该怎么做,我甚至把一个kwargs与pk键在反向懒惰,但仍然不会工作。

Views.py:

from django.shortcuts import render
from django.views import generic
from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse_lazy 
from django.contrib import messages
from . import forms
from . import models
# Create your views here.
class AnnouncementListView(LoginRequiredMixin, generic.ListView):
model = models.Announcement
class AnnouncementDetailView(LoginRequiredMixin, generic.DetailView ):
model = models.Announcement
class AnnouncementUpdateView(LoginRequiredMixin, generic.UpdateView):
model = models.Announcement
form_class = forms.AnnouncementForm
class AnnouncementCreateView(LoginRequiredMixin, generic.CreateView ):
model = models.Announcement
form_class = forms.AnnouncementForm
class AnnouncementDeleteView(LoginRequiredMixin, generic.DeleteView ):
model = models.Announcement
success_url = reverse_lazy('announcement:single')
def delete(self, *args, **kwargs):
messages.success(self.request, "Post Deleted")
return super().delete(*args, **kwargs)

announcement_confirm_delete.html:

{% extends 'base.html' %}

{% block content %}
<div class="container">
<form method="post" action="{% url 'announcement:destroy' announcement.pk %}">
{% csrf_token %}
<h3>Are you sure you want to delete this?</h3>
<div class="row">
<input class='btn btn-danger' type="submit" value="Delete" />
<a href="{% url 'home' %}" class="btn btn-light btn-large">Cancel</a>
</div>
</form>
</div>

{% endblock  %}

正如你的其他问题的屏幕截图所示,announcement:single需要一个pk参数,所以你需要在success_url中使用一个函数来支持它。

Django的通用视图有一个get_success_url;

def get_success_url(self):
return reverse_lazy('announcement:single', kwargs={'pk': self.object.id})

但是那是在删除视图上,所以在成功时你不能去到一个详细描述你刚刚删除的对象的视图,所以在删除成功时去列表视图更有意义。

必须更改AnnouncementDeleteView的成功目录,现在是:

success_url = reverse_lazy('announcement:single')

我想一定是:success_url = reverse_lazy('announcement:list')

或添加主键:reverse_lazy('announcement:single', kwargs={'pk': desired_id})

最新更新