Django DeleteView找不到DB对象

时间:2018-05-24 06:38:30

标签: python django python-3.x

我的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;">

[pkyr密钥来自上下文生成器。]因此,当我从模板发出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看起来很直接 - 所以不确定它是如何编码错误的。

任何想法都会受到赞赏。

1 个答案:

答案 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})