Django统计Employee模型数据并在模板展示失败求助
解决ListView模板中无法获取数据总数的问题
嘿,我知道你遇到的问题了!咱们来一步步解决它~
首先得搞清楚为什么employee_set.count没用:你用的是EmployeeListView,并且设置了context_object_name = 'employees',这意味着模板里能拿到的员工列表变量是employees。而employee_set是Django中反向关联模型才会有的管理器(比如你有一个Department模型和Employee关联,那在Department的详情页里才能通过department.employee_set访问该部门的员工),现在你的视图是直接展示所有Employee的列表,模板里根本没有employee_set这个变量,所以调用它的count自然会失效。
下面给你两种简单的解决方法:
方法一:直接使用现有上下文变量的count属性
既然视图已经把员工列表以employees的名字传到模板里了,你直接用这个QuerySet的count属性就行(模板中调用方法不需要加括号):
修改你的employee.html:
<h5 class='margin-bottom'>Total Data {{ employees.count }}</h5>
方法二:在视图中主动添加总数到上下文
如果你希望模板里用更清晰的变量名(比如total_employees),可以重写ListView的get_context_data方法,提前计算好总数并传到模板:
修改views.py:
class EmployeeListView(ListView): context_object_name = 'employees' model = models.Employee def get_context_data(self, **kwargs): # 先获取ListView默认的上下文数据 context = super().get_context_data(**kwargs) # 这里如果要统计全量员工总数,用下面这行 context['total_employees'] = self.model.objects.count() # 如果你要统计当前列表(比如做了过滤后的)的总数,改成这行: # context['total_employees'] = context['employees'].count() return context
然后模板里就可以这样用:
<h5 class='margin-bottom'>Total Data {{ total_employees }}</h5>
内容的提问来源于stack exchange,提问作者Dicky Raambo
相关产品推荐
相关产品推荐

