Django ListView 中当前用户对象的列表
Posted
技术标签:
【中文标题】Django ListView 中当前用户对象的列表【英文标题】:List of current user objects in Django ListView 【发布时间】:2020-04-11 23:01:00 【问题描述】:我想在我的模板上呈现所有对象的列表,它们的作者是当前登录的用户。我将当前用户的用户名传递给url.py
:
<a href="% url 'myscenarios' user.username %">My List</a>
我的 urls.py:
path('myscenarios/<str:username>/', MyScenarioListView.as_view(), name='myscenarios'),
我的问题是如何在 views.py
中构建查询集以及在我的 html 中的模板块中输入什么?
class MyScenarioListView(LoginRequiredMixin, ListView):
model = Scenario
template_name = 'testmanager/myscenarios.html'
context_object_name = 'myscenarios'
def get_queryset(self):
user = get_object_or_404(User, username=self.kwargs.get('username'))
return Scenario.objects.filter(scenarioAuthor = user).order_by('-date_posted')
我应该在我的myscenarios.html
文件中输入什么代码?
【问题讨论】:
【参考方案1】:我想在我的模板上呈现所有对象的列表,它们的作者是当前登录的用户。
那么您应该不在路径中对用户进行编码,因为“黑客”可以简单地更改 URL 以查看属于不同用户的项目。
您可以在此处使用self.request.user
。因此路径如下所示:
path('myscenarios/', MyScenarioListView.as_view(), name='myscenarios'),
在视图中,我们使用:
class MyScenarioListView(LoginRequiredMixin, ListView):
model = Scenario
template_name = 'testmanager/myscenarios.html'
context_object_name = 'myscenarios'
def get_queryset(self):
return Scenario.objects.filter(
scenarioAuthor=self.request.user
).order_by('-date_posted')
它将Scenarios
作为myscenarios
传递给模板,因此您可以使用:
% for scenario in myscenarios %
scenario
% endfor %
【讨论】:
你能告诉我们如何使用 queryset= docs.djangoproject.com/en/3.0/topics/class-based-views/… 来完成同样的事情吗? @VisheshMangla:你没有,因为该查询集无权访问self
,因此无法找到登录用户。
是的,我也曾想过没有自我是不可能的。谢谢@WillemVanOnsem!。以上是关于Django ListView 中当前用户对象的列表的主要内容,如果未能解决你的问题,请参考以下文章
ListView中多个上下文中特定上下文的分页在django中不起作用?