代码之家  ›  专栏  ›  技术社区  ›  Micah Pearce

Django 2.0:必须使用对象pk或slug调用泛型细节视图

  •  0
  • Micah Pearce  · 技术社区  · 6 年前

    所以我刚刚在细节视图中添加了一个更新视图。但是,当我在下面添加“Edit”按钮后尝试加载页面时,会出现一般的详细视图错误。怎么回事?

    <td><a href="{% url 'thing:update' thing_id=thing_id%}" class="btn btn-primary" class>Edit</a></td>
    

    网址.py

            path('update/<slug:thing_id>/', ThingUpdateView.as_view(), name='update'),
    

    视图.py

        class ThingUpdateView(LoginRequiredMixin, UpdateView):
        model      = ThingUser
        form_class = ThingUserFormSet
        template_name = "thing/update.html"
    

    File "C:\myapp\lib\site-packages\django\core\handlers\exception.py" in inner
      35.             response = get_response(request)
    
    File "C:\myapp\lib\site-packages\django\core\handlers\base.py" in _get_response
      128.                 response = self.process_exception_by_middleware(e, request)
    
    File "C:\myapp\lib\site-packages\django\core\handlers\base.py" in _get_response
      126.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)
    
    File "C:\myapp\lib\site-packages\django\views\generic\base.py" in view
      69.             return self.dispatch(request, *args, **kwargs)
    
    File "C:\myapp\lib\site-packages\django\contrib\auth\mixins.py" in dispatch
      52.         return super().dispatch(request, *args, **kwargs)
    
    File "C:\myapp\lib\site-packages\django\views\generic\base.py" in dispatch
      89.         return handler(request, *args, **kwargs)
    
    File "C:\myapp\lib\site-packages\django\views\generic\edit.py" in get
      189.         self.object = self.get_object()
    
    File "C:\myapp\lib\site-packages\django\views\generic\detail.py" in get_object
      47.                                  % self.__class__.__name__)
    
    Exception Type: AttributeError at /thing/update/8bv4tyrkyy/
    Exception Value: Generic detail view ThingUpdateView must be called with either an object pk or a slug.
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   neverwalkaloner    6 年前

    默认情况下,Django使用 slug thing_id 您需要在视图中使用 slug_url_kwarg

    class ThingUpdateView(LoginRequiredMixin, UpdateView):
        model      = ThingUser
        form_class = ThingUserFormSet
        template_name = "thing/update.html"
        slug_url_kwarg = 'thing_id'