我正在Django中构建一个应用程序,我想为经过身份验证的用户设置一个主页。
我认为最好使用de内置generic.DetailView
,因为我想在页面中显示的详细信息是已识别用户的详细信息。问题是,这个类需要通过URL作为十进制 pk 参数接收目标实体的id。但是,有关该实体的信息位于request.user
,我希望避免重复该信息,以免在网址中显示我的用户ID。
我认为在get_object
方法中获取request
可以解决问题,但不需要参数。
这可能吗?这是一个好主意吗?有没有我可能遗失的替代方案?
答案 0 :(得分:3)
DetailView
只需要pk
或slug
来获取对象。如果您覆盖get_object
,则不需要。在get_object
方法中,您可以使用self.request.user
访问该用户。
最后,如果您的视图使用登录用户,则可以使用LoginRequiredMixin
确保只有登录用户才能访问该视图。
from django.contrib.auth.mixins import LoginRequiredMixin
class MyDetailView(LoginRequiredMixin, DetailView):
...
def get_object(self):
return self.request.user