gpt4 book ai didi

python - 如何使用当前登录用户作为 Django DetailView 的 PK?

转载 作者:太空狗 更新时间:2023-10-30 02:33:02 26 4
gpt4 key购买 nike

在定义 URL 模式时,我应该使用正则表达式从 URL 获取 PK。

如果我想要一个没有 PK 的 URL,如果没有提供,它将使用当前登录的用户怎么办?示例:

  • 访问 /user 将获得当前登录用户的 DetailView
  • /user/edit 将为当前登录的用户显示一个 UpdateView

我尝试在 Detail.as_view() 调用中对 pk= 进行硬编码,但它报告无效关键字。

如何在 URL conf 中指定它?

我的示例代码在访问 /user URL 时显示 PK required 错误:

urlpatterns = patterns('',
url(r'user/$',
DetailView.as_view(
model=Account,
template_name='user/detail.html')),
)`

最佳答案

另一种方法是覆盖 DetailView 子类的 get_object 方法,大致如下:

class CurrentUserDetailView(UserDetailView):
def get_object(self):
return self.request.user

比 mixin 方法更清晰、更简单并且更符合基于类的 View 的精神。

编辑:为澄清起见,我认为应该在 urlconf 中分别定义两种不同的 URL 模式(即一种带有 pk,另一种不带)。因此,它们也可以由两个不同的 View 提供服务,尤其是因为这使代码更清晰。在这种情况下,urlconf 可能类似于:

urlpatterns = patterns('',
url(r"^users/(?P<pk>\d+)/$", UserDetailView.as_view(), name="user_detail"),
url(r"^users/current/$", CurrentUserDetailView.as_view(), name="current_user_detail"),
url(r"^users/$", UserListView.as_view(), name="user_list"),
)

我更新了上面的示例,注意到它继承了 UserDetailView,这使它更加清晰,并清楚地表明它到底是什么:父 View 的一个特例。

关于python - 如何使用当前登录用户作为 Django DetailView 的 PK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15215295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com