perf: 优化计算数量

pull/6569/head
ibuler 3 years ago committed by 老广
parent f031f4d560
commit b56b897260

@ -1,3 +1,5 @@
from collections import defaultdict
from django.db import models
from django.db.models import Count
from django.utils.translation import ugettext_lazy as _
@ -67,7 +69,7 @@ class ApplicationTreeNodeMixin:
i = root_node.id + '_' + category.value
node = cls.create_choice_node(
category, i, pid=root_node.id, tp='category',
counts=counts, opened=True, show_empty=show_empty,
counts=counts, opened=False, show_empty=show_empty,
show_count=show_count
)
if not node:
@ -84,7 +86,7 @@ class ApplicationTreeNodeMixin:
pid = root_node.id + '_' + category.value
i = root_node.id + '_' + tp.value
node = cls.create_choice_node(
tp, i, pid, tp='type', counts=counts,
tp, i, pid, tp='type', counts=counts, opened=False,
show_empty=show_empty, show_count=show_count
)
if not node:
@ -94,18 +96,13 @@ class ApplicationTreeNodeMixin:
@staticmethod
def get_tree_node_counts(queryset):
counts = {'applications': queryset.count()}
category_counts = queryset.annotate(count=Count('id'))\
.values('category', 'count') \
.order_by()
for item in category_counts:
counts[item['category']] = item['count']
type_counts = queryset.annotate(count=Count('id')) \
.values('type', 'count') \
.order_by()
for item in type_counts:
counts[item['type']] = item['count']
counts = defaultdict(int)
values = queryset.values_list('type', 'category')
for i in values:
tp = i[0]
category = i[1]
counts[tp] += 1
counts[category] += 1
return counts
@classmethod

Loading…
Cancel
Save