我的DeleteView帖子返回Page not found (404)
错误。我不明白为什么。
url.py
path('<int:pk>/<int:yr>/<int:id>/deleteit/', views.DeleteIt.as_view(), name='delete-it'),
view.py
class DeleteIt(DeleteView):
model = MyModel
def get_success_url(self):
client_id = self.object.client_id
year_id = self.object.year_id
return reverse_lazy('itemview', kwargs = {'pk': client_id, 'yr': year_id})
模板 - - 发布模板
<form action="{% url 'delete-it' pk=url_pk yr=url_yr id=item_id %}" method="post" style="display: inline;">
[pk
和yr
密钥来自上下文生成器。]因此,当我从模板发出post
请求时,网址为
http://127.0.0.1:8000/MyApp/1/1/3/deleteit/
URL为/pk/yr/id/
,其中id
是数据库中MyModel对象的ID。该对象存在,它具有所有正确的键。当我进行POST时,对象没有被删除(我认为这是因为没有成功删除URL的结果。
没有错误跟踪 - 但控制台说:
[23/May/2018 22:53:32] "GET /MyApp/1/1/ HTTP/1.1" 200 13946
Not Found: /MyApp/1/1/3/deleteit/
[23/May/2018 22:55:10] "POST /MyApp/1/1/3/deleteit/ HTTP/1.1" 404 1797
我的理解是get_success_url
没有被调用,因为抛出了错误。 DeleteView看起来很直接 - 所以不确定它是如何编码错误的。
任何想法都会受到赞赏。
答案 0 :(得分:1)
DeleteView
默认情况下尝试按pk
网址参数查找对象。要按id
网址参数搜索对象,您需要指定pk_url_kwarg
:
class DeleteIt(DeleteView):
model = MyModel
pk_url_kwarg = 'id'
def get_success_url(self):
client_id = self.object.client_id
year_id = self.object.year_id
return reverse_lazy('itemview', kwargs = {'pk': client_id, 'yr': year_id})