mirror of
https://github.com/inventree/InvenTree.git
synced 2025-12-16 17:28:11 +00:00
[refactor] Generic status API (#11009)
* Fix docs formatting * [refactor] cache custom states - Generic state API endpoint executed query for each state type - We can run a single database query and cache these in memory - Reduces query time by ~50%
This commit is contained in:
@@ -129,11 +129,24 @@ class AllStatusViews(StatusView):
|
||||
# Find all inherited status classes
|
||||
status_classes = inheritors(StatusCode)
|
||||
|
||||
for cls in status_classes:
|
||||
cls_data = {'status_class': cls.__name__, 'values': cls.dict()}
|
||||
# Pre-fetch all custom values from the database
|
||||
# This reduces the number of queries required
|
||||
from common.models import InvenTreeCustomUserStateModel
|
||||
|
||||
# Extend with custom values
|
||||
for item in cls.custom_values():
|
||||
custom_states_map = {}
|
||||
for state in InvenTreeCustomUserStateModel.objects.all():
|
||||
key = state.reference_status
|
||||
if key not in custom_states_map:
|
||||
custom_states_map[key] = []
|
||||
custom_states_map[key].append(state)
|
||||
|
||||
for cls in status_classes:
|
||||
cls_data = {'status_class': cls.__name__, 'values': cls.dict(custom=False)}
|
||||
|
||||
# Extend with custom values (from pre-cached queryset)
|
||||
custom_states = custom_states_map.get(cls.__name__, [])
|
||||
|
||||
for item in custom_states:
|
||||
label = str(item.name)
|
||||
if label not in cls_data['values']:
|
||||
cls_data['values'][label] = {
|
||||
|
||||
Reference in New Issue
Block a user