代码之家  ›  专栏  ›  技术社区  ›  mimo

获取依赖于UpdateView中的“request”的对象

  •  0
  • mimo  · 技术社区  · 6 年前

    my_profile/edit/ 而不是像这样 profile/<int:pk>/edit/ ,使用基于 UpdateView request 对象,和 get_object 无法直接访问它。

    我的两个问题:

    • 我可以用吗 更新视图 在这种情况下?

    • get_object(self, queryset=None) ? 到目前为止,我最好的尝试是:

      class EditProfileView(UpdateView):
          model = UserProfile
          _request = None
      
          def get_object(self, queryset=None):
              return get_user_profile(self._request)
      
          def dispatch(self, request, *args, **kwargs): # can also override setup() in newer Django versions
              self._request = request
              return super().dispatch(request, *args, **kwargs)
      

    在我看来,这已经足够干净了,除非有一天Django框架决定 获取对象 应该在视图生成的工作流早期调用,这段代码可能会中断。

    0 回复  |  直到 6 年前
        1
  •  2
  •   Daniel Roseman    6 年前

    你不需要这么做。所有基于类的视图都将请求作为 self.request .

    class EditProfileView(UpdateView):
        model = UserProfile
    
        def get_object(self, queryset=None):
            return get_user_profile(self.request)
    

    注意,即使没有,你仍然不需要定义 _request

    我也不知道你 get_user_profile 函数可以,但它可能可以替换为 self.request.user.profile