mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Improved speed of stock tree
This commit is contained in:
parent
a796b984ff
commit
642660d76e
@ -62,13 +62,18 @@ class InvenTreeTree(models.Model):
|
|||||||
If any parents are repeated (which would be very bad!), the process is halted
|
If any parents are repeated (which would be very bad!), the process is halted
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if unique is None:
|
item = self
|
||||||
unique = set()
|
|
||||||
else:
|
|
||||||
unique.add(self.id)
|
|
||||||
|
|
||||||
if self.parent and self.parent.id not in unique:
|
# Prevent infinite regression
|
||||||
self.parent.getUniqueParents(unique)
|
max_parents = 500
|
||||||
|
|
||||||
|
unique = set()
|
||||||
|
|
||||||
|
while item.parent and max_parents > 0:
|
||||||
|
max_parents -= 1
|
||||||
|
|
||||||
|
unique.add(item.parent.id)
|
||||||
|
item = item.parent
|
||||||
|
|
||||||
return unique
|
return unique
|
||||||
|
|
||||||
|
@ -66,9 +66,8 @@ class PartCategory(InvenTreeTree):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def item_count(self):
|
def item_count(self):
|
||||||
return self.partcount
|
return self.partcount()
|
||||||
|
|
||||||
@property
|
|
||||||
def partcount(self, cascade=True, active=True):
|
def partcount(self, cascade=True, active=True):
|
||||||
""" Return the total part count under this category
|
""" Return the total part count under this category
|
||||||
(including children of child categories)
|
(including children of child categories)
|
||||||
|
@ -49,19 +49,23 @@ class StockLocation(InvenTreeTree):
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@property
|
def stock_item_count(self, cascade=True):
|
||||||
def stock_item_count(self):
|
|
||||||
""" Return the number of StockItem objects which live in or under this category
|
""" Return the number of StockItem objects which live in or under this category
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return StockItem.objects.filter(location__in=self.getUniqueChildren()).count()
|
if cascade:
|
||||||
|
query = StockItem.objects.filter(location__in=self.getUniqueChildren())
|
||||||
|
else:
|
||||||
|
query = StockItem.objects.filter(location=self)
|
||||||
|
|
||||||
|
return query.count()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def item_count(self):
|
def item_count(self):
|
||||||
""" Simply returns the number of stock items in this location.
|
""" Simply returns the number of stock items in this location.
|
||||||
Required for tree view serializer.
|
Required for tree view serializer.
|
||||||
"""
|
"""
|
||||||
return self.stock_item_count
|
return self.stock_item_count()
|
||||||
|
|
||||||
|
|
||||||
@receiver(pre_delete, sender=StockLocation, dispatch_uid='stocklocation_delete_log')
|
@receiver(pre_delete, sender=StockLocation, dispatch_uid='stocklocation_delete_log')
|
||||||
|
Loading…
Reference in New Issue
Block a user