django - 显示在 Django 模型中创建的项目总数
问题描述
我的 Django 项目包含一个带有项目和任务的任务管理器,我有一个通用列表页面,显示所有项目的列表及其总任务的信息:
class IndexView(generic.ListView):
template_name = 'projects/index.html'
context_object_name = 'project_list'
def get_queryset(self):
"""Return 10 projects."""
return Project.objects.order_by('is_complete')[:10]
我想在我的列表页面上显示添加的项目和任务的总数,但我不确定我应该如何去做。我目前的所有工作都是列出每个项目中包含的任务数量,但现在我想要一个总数 - 我应该将其添加为新视图吗?例如,我尝试将其添加到上面的视图中:
def total_projects(self):
return Project.objects.count()
然后调用{{ project_list.total_projects }}
我的模板,但它没有返回任何内容。
视图是执行此操作的正确位置吗?
解决方案
目前的所有工作都是列出每个项目中包含的任务数量,但现在我想要一个总数 - 我应该将其添加为新视图吗?
这取决于。如果您只想显示数据库中前 10 个已完成项目的项目和任务总数(这是您的get_queryset
方法所做的,要小心),我会在同一个视图中完成所有这些(它会是仅仅为了显示一些数字而创建一个新视图是没有用的,这不是ListView
IMO 的目的)。
另一方面,您正在total_projects
从模型的实例调用类的实例方法 ( )。该方法在模型上不存在,并且当在模板中调用对象中不存在属性/方法时,您将一无所获。基于上一段,我将使用get_context_data在视图的上下文中设置它:
def get_context_data(self, **kwargs):
data = super().get_context_data(**kwargs)
data["total_projects"] = Projects.objects.count()
# I'm assuming you only need the whole number of tasks with no separation
data["total_tasks"] = Task.objects.count()
return data
最后,您可以编辑您的get_queryset
方法并使其成为实例属性(如果您希望它更干净,并且无需额外代码即可处理过滤):
class IndexView(generic.ListView):
queryset = Project.objects.order_by('is_complete')[:10]
推荐阅读
- powershell - 在 taskfile.yml 中运行 powershell 脚本
- java - 模板解析时出错(模板:“类路径资源[templates/hello.html]
- ios - URLSession 的理想值 - Swift 中的 delegateQueue
- django - Django Rest Framework - 如果将其中一个字段作为 URL 变量提供,如何使用“UniqueTogetherValidator”
- c++ - 如何并行合并两个地图?
- visual-studio-code - 如何使用实时服务器 vscode 打开 Github 拉取请求
- django - TemplateDoesNotExist 在 /index/
- javascript - Javascript 异步函数的简短摘要
- java - 关闭活动而不显示它
- jenkins - jenkins inbound-agent 无法在 Kubernetes 中访问 master