Django ListView 中当前用户对象的列表

luk*_*s06 2 python django django-urls django-generic-views

我想呈现模板上所有对象的列表,其作者是当前登录的用户。我将当前用户的用户名传递给url.py

<a href="{% url 'myscenarios' user.username %}">My List</a>
Run Code Online (Sandbox Code Playgroud)

我的网址.py:

path('myscenarios/<str:username>/', MyScenarioListView.as_view(), name='myscenarios'),
Run Code Online (Sandbox Code Playgroud)

我的问题是如何构建查询集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')
Run Code Online (Sandbox Code Playgroud)

我应该在文件中输入什么代码myscenarios.html

Wil*_*sem 6

我想呈现模板上所有对象的列表,其作者是当前登录的用户。

那么您应该在路径中对用户进行编码,因为“黑客”可以简单地更改 URL 来查看属于不同用户的项目。

您可以利用self.request.user这里。该路径如下所示:

path('myscenarios/', MyScenarioListView.as_view(), name='myscenarios'),
Run Code Online (Sandbox Code Playgroud)

在视图中,我们使用:

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')
Run Code Online (Sandbox Code Playgroud)

它将把Scenariosas传递myscenarios给模板,所以你可以用以下方式渲染它:

{% for scenario in myscenarios %}
     {{ scenario }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)