【发布时间】:2021-01-16 23:29:27
【问题描述】:
您好,我正在使用以下代码获取带有子查询的 ListView 中每个项目的进度百分比
class projects(LoginRequiredMixin, ListView):
model = Project
template_name = 'project_list.html'
ordering = ['project_title']
paginate_by = 10
queryset = Project.objects.annotate(
todo_done=Count('todo', filter=Q(todo__state=True)) * 100 / Count('todo'),
todo_left=Count('todo', filter=Q(todo__state=False)) * 100 / Count('todo'),
)
在一个项目中,我有 12 个任务,8 个已完成,4 个正在进行中。系统返回 66% 已完成和 33% 正在进行中,总和是 99% 而不是 100%
{{ project.todo_done }}
{{ project.todo_left }}
栏的一部分是空白的,因为缺少 1%。我尝试按如下方式使用圆形,但这是不可能的
todo_done=round(Count('todo', filter=Q(todo__state=True)) * 100 / Count('todo')),
TypeError: type CombinedExpression doesn't define __round__ method
【问题讨论】: