【问题标题】:Django get_queryset return custom variablesDjango get_queryset 返回自定义变量
【发布时间】:2020-09-09 01:57:25
【问题描述】:

以用户为例,我试图展示有多少用户。 get_context_data 工作得很好,但 get_queryset 不行。我知道它没有正确设置,但我已经玩了好几天了,只是没有点击..

主要目标是使用Dajngo-Filter 表单,然后能够获取更新的用户数。我只找到了关于如何显示用户“列表”的无穷无尽的文档。我已经完成了,但没有关于如何显示自定义变量的文档。我有很多统计数据和图表,我想根据应用的过滤器进行计算。

class UserFilterView(LoginRequiredMixin, FilterView):
    template_name = 'community/user_list.html'
    model =  User
    filterset_class = UserFilter

    def get_queryset(self):
        user_count = User.objects.all().count()

    def get_context_data(self, *args, **kwargs):
        context = super(UserFilterView, self).get_context_data(*args, **kwargs)
        context['user_count'] = User.objects.all().count()
        return context

【问题讨论】:

  • 如果你想显示聚合统计数据而不是模型对象,那么你不应该使用基于模型的视图。或者您可以在查询集中注释统计信息
  • 哪种方法最好?仍然没有找到解决办法。当前尝试添加查询集: context['filter'] = UserFilter(self.request.GET, queryset=self.get_queryset())

标签: django django-rest-framework django-views django-class-based-views django-filter


【解决方案1】:
context['user_count'] = User.objects.all().count()

设置为始终计算所有用户。所以,当然,它总是会按照它的程序来做。

相反,我应该使用过滤后的查询集中的 .count。

view.py

class UserFilterView(LoginRequiredMixin, FilterView):
    template_name = 'community/user_list.html'
    model =  User
    filterset_class = UserFilter

    def get_context_data(self, *args, **kwargs):
        context = super(UserFilterView, self).get_context_data(*args, **kwargs)
        context['qs'] = User.objects.all()
        return context

模板:

User Count: {{ filter.qs.count }}

【讨论】:

    猜你喜欢
    • 2022-07-30
    • 2021-06-27
    • 2021-03-05
    • 2013-05-26
    • 2018-12-27
    • 2014-09-14
    • 2019-06-08
    • 2013-05-04
    • 1970-01-01
    相关资源
    最近更新 更多