get_object() 取决于 UpdateView 中的“request”

get_object() that depends on `request` in UpdateView

我正在编写一个基于 class 的视图,以允许用户编辑他们的个人资料。由于我希望用户使用 my_profile/edit/ 类型的 URL 而不是 profile/<int:pk>/edit/ 之类的东西来访问此视图,因此使用基于 UpdateView 的视图非常麻烦,因为获取用户配置文件对象需要访问 request 对象,而 get_object 不能直接访问它。

我的两个问题:

这对我来说看起来很干净,除了如果有一天 Django 框架决定 get_object 应该在视图生成的工作流程的早期调用,这段代码可能会中断。

您不需要这样做。所有基于 class 的视图都使请求可用 self.request.

你的整个代码应该是:

class EditProfileView(UpdateView):
    model = UserProfile

    def get_object(self, queryset=None):
        return get_user_profile(self.request)

请注意,即使没有,您仍然不需要在 class 级别定义 _request。这在 Python.

中是没有必要的

另外,我不知道你的 get_user_profile 功能是做什么的,但它可能可以用 self.request.user.profile.

代替