Reduced tree time with some better queries

This commit is contained in:
Oliver Walters 2019-06-17 23:52:49 +10:00
parent b519a1981d
commit 037dc6a0d6
3 changed files with 21 additions and 7 deletions

View File

@ -52,8 +52,10 @@ class TreeSerializer(views.APIView):
if item.has_children:
nodes = []
"""
for child in item.children.all().order_by('name'):
nodes.append(self.itemToJson(child))
"""
data['nodes'] = nodes
@ -63,10 +65,12 @@ class TreeSerializer(views.APIView):
return self.model.objects.all()
def generate_tree(self, items):
def generate_tree(self):
nodes = []
items = self.get_items()
# Construct the top-level items
top_items = [i for i in items if i.parent is None]
@ -87,9 +91,7 @@ class TreeSerializer(views.APIView):
def get(self, request, *args, **kwargs):
""" Respond to a GET request for the Tree """
items = self.model.objects.all()
self.generate_tree(items)
self.generate_tree()
response = {
'tree': [self.tree]

View File

@ -34,6 +34,11 @@ class PartCategoryTree(TreeSerializer):
def root_url(self):
return reverse('part-index')
def get_items(self):
print("hello world")
return PartCategory.objects.all().prefetch_related('parts', 'children')
class CategoryList(generics.ListCreateAPIView):
""" API endpoint for accessing a list of PartCategory objects.

View File

@ -69,13 +69,20 @@ class PartCategory(InvenTreeTree):
return self.partcount
@property
def partcount(self):
def partcount(self, cascade=True, active=True):
""" Return the total part count under this category
(including children of child categories)
"""
return len(Part.objects.filter(category__in=self.getUniqueChildren(),
active=True))
if cascade:
query = Part.objects.filter(category__in=self.getUniqueChildren())
else:
query = Part.objects.filter(category=self)
if active:
query = query.filter(active=True)
return query.count()
@property
def has_parts(self):