mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Update queryset annotation for StockItem
- Query time reduced from 4.1 to 3.5s (for sample data)
This commit is contained in:
parent
42967905bc
commit
db214dfd73
@ -9,9 +9,12 @@ from .models import StockItemTracking
|
||||
from .models import StockItemAttachment
|
||||
from .models import StockItemTestResult
|
||||
|
||||
from django.db.models import Sum, Count
|
||||
from django.db.models.functions import Coalesce
|
||||
|
||||
from sql_util.utils import SubquerySum, SubqueryCount
|
||||
|
||||
from decimal import Decimal
|
||||
|
||||
from company.serializers import SupplierPartSerializer
|
||||
from part.serializers import PartBriefSerializer
|
||||
from InvenTree.serializers import UserSerializerBrief, InvenTreeModelSerializer
|
||||
@ -90,11 +93,18 @@ class StockItemSerializer(InvenTreeModelSerializer):
|
||||
performing database queries as efficiently as possible.
|
||||
"""
|
||||
|
||||
# Annotate the queryset with the total allocated to sales orders
|
||||
queryset = queryset.annotate(
|
||||
allocated=Coalesce(
|
||||
Sum('sales_order_allocations__quantity', distinct=True), 0) + Coalesce(
|
||||
Sum('allocations__quantity', distinct=True), 0),
|
||||
tracking_items=Count('tracking_info'),
|
||||
SubquerySum('sales_order_allocations__quantity'), Decimal(0)
|
||||
) + Coalesce(
|
||||
SubquerySum('allocations__quantity'), Decimal(0)
|
||||
)
|
||||
)
|
||||
|
||||
# Annotate the queryset with the number of tracking items
|
||||
queryset = queryset.annotate(
|
||||
tracking_items=SubqueryCount('tracking_info')
|
||||
)
|
||||
|
||||
return queryset
|
||||
|
Loading…
Reference in New Issue
Block a user