【问题标题】:List of current user objects in Django ListViewDjango 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 文件中输入什么代码?

【问题讨论】:

    标签: python django django-urls django-generic-views


    【解决方案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!。
    猜你喜欢
    • 1970-01-01
    • 2021-04-07
    • 2020-07-09
    • 2011-01-27
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    相关资源
    最近更新 更多