代码之家  ›  专栏  ›  技术社区  ›  Bill Armstrong

Django DeleteView找不到数据库对象

  •  0
  • Bill Armstrong  · 技术社区  · 8 年前

    我的DeleteView帖子正在返回 Page not found (404) 错误。我不清楚为什么。

    尤里

    path('<int:pk>/<int:yr>/<int:id>/deleteit/', views.DeleteIt.as_view(), name='delete-it'),
    

    视图.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 从我的模板请求URL是

    http://127.0.0.1:8000/MyApp/1/1/3/deleteit/
    

    网址是 /pk/yr/id/ 在哪里? id 是数据库中MyModel对象的ID。对象存在,并且具有所有正确的键。当我发帖时,对象不会被删除(我认为这是由于没有成功的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 回复  |  直到 8 年前
        1
  •  1
  •   neverwalkaloner    8 年前

    DeleteView 试图通过以下方式找到对象 pk 默认情况下为url参数。按搜索对象 id 需要指定的URL参数 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})