我有 1 個任務表,這些任務可以處于 3 個狀態“待辦事項”、“進行中”和“完成”,我想計算每個狀態'任務的總數,并將其放入像 ('todo total','progress total','done total'),知道我怎樣才能做到這一點嗎?我的最終目標是在 Chartjs 中顯示 3 個小計,提前致謝。
models.py
'''
class Todo(models.Model):
status_option = (
('to_do', 'to_do'),
('in_progress', 'in_progress'),
('done', 'done'),
)
status = models.CharField(max_length=20, choices=status_option, default='to_do')
# todo_list's content
team = models.ForeignKey('Team', on_delete=models.CASCADE)
project = models.ForeignKey(Project, on_delete=models.CASCADE)
name = models.CharField(max_length=20)
create_date = models.DateTimeField(auto_now_add=True)
start_date = models.DateTimeField(default=datetime.datetime.now)
due_date = models.DateTimeField(default=datetime.datetime.now)
project_code = models.CharField(max_length=20)
details = models.TextField()
def __str__(self):
return self.status
# return self.team['team'].queryset
def update_status(self):
if self.status == 'to_do':
self.status = 'in_progress'
elif self.status == 'in_progress':
self.status = 'done'
self.save()
'''
uj5u.com熱心網友回復:
如果你想自己計算一個狀態,你可以這樣做:
to_do_count = Todo.objects.filter(status='to_do').count()
如果你想要一個計算每個狀態的字典,你可以這樣做:
from django.db.models import Case, When
counts_data = Todo.objects.aggregate(
to_do_count=Count(Case(When(status='to_do', then=1))),
in_progress_count=Count(Case(When(status='in_progress', then=1))),
done_count=Count(Case(When(status='done', then=1))),
)
或這個:
from django.db.models import Q
counts_data = Todo.objects.aggregate(
to_do_count = Count('pk', filter=Q(status='to_do')),
in_progress_count = Count('pk', filter=Q(status='in_progress')),
done_count = Count('pk', filter=Q(status='done'))
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/334393.html
上一篇:模型表單無法保存在資料庫中
