mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Add a query param `?include_pricing' to the BomItem API
- Set this to false to disable pricing info in BOM - Drastic reduction in query speed
This commit is contained in:
parent
349030aa74
commit
d8b9420d2d
@ -1100,6 +1100,12 @@ class BomList(generics.ListCreateAPIView):
|
|||||||
except AttributeError:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Include or exclude pricing information in the serialized data
|
||||||
|
kwargs['include_pricing'] = str2bool(self.request.GET.get('include_pricing', True))
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
|
||||||
# Ensure the request context is passed through!
|
# Ensure the request context is passed through!
|
||||||
kwargs['context'] = self.get_serializer_context()
|
kwargs['context'] = self.get_serializer_context()
|
||||||
|
|
||||||
@ -1141,6 +1147,19 @@ class BomList(generics.ListCreateAPIView):
|
|||||||
except (ValueError, Part.DoesNotExist):
|
except (ValueError, Part.DoesNotExist):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
include_pricing = str2bool(params.get('include_pricing', True))
|
||||||
|
|
||||||
|
if include_pricing:
|
||||||
|
queryset = self.annotate_pricing(queryset)
|
||||||
|
|
||||||
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
|
def annotate_pricing(self, queryset):
|
||||||
|
"""
|
||||||
|
Add part pricing information to the queryset
|
||||||
|
"""
|
||||||
|
|
||||||
# Annotate with purchase prices
|
# Annotate with purchase prices
|
||||||
queryset = queryset.annotate(
|
queryset = queryset.annotate(
|
||||||
purchase_price_min=Min('sub_part__stock_items__purchase_price'),
|
purchase_price_min=Min('sub_part__stock_items__purchase_price'),
|
||||||
|
@ -419,6 +419,7 @@ class BomItemSerializer(InvenTreeModelSerializer):
|
|||||||
|
|
||||||
part_detail = kwargs.pop('part_detail', False)
|
part_detail = kwargs.pop('part_detail', False)
|
||||||
sub_part_detail = kwargs.pop('sub_part_detail', False)
|
sub_part_detail = kwargs.pop('sub_part_detail', False)
|
||||||
|
include_pricing = kwargs.pop('include_pricing', False)
|
||||||
|
|
||||||
super(BomItemSerializer, self).__init__(*args, **kwargs)
|
super(BomItemSerializer, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
@ -428,6 +429,14 @@ class BomItemSerializer(InvenTreeModelSerializer):
|
|||||||
if sub_part_detail is not True:
|
if sub_part_detail is not True:
|
||||||
self.fields.pop('sub_part_detail')
|
self.fields.pop('sub_part_detail')
|
||||||
|
|
||||||
|
if not include_pricing:
|
||||||
|
# Remove all pricing related fields
|
||||||
|
self.fields.pop('price_range')
|
||||||
|
self.fields.pop('purchase_price_min')
|
||||||
|
self.fields.pop('purchase_price_max')
|
||||||
|
self.fields.pop('purchase_price_avg')
|
||||||
|
self.fields.pop('purchase_price_range')
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def setup_eager_loading(queryset):
|
def setup_eager_loading(queryset):
|
||||||
queryset = queryset.prefetch_related('part')
|
queryset = queryset.prefetch_related('part')
|
||||||
|
Loading…
Reference in New Issue
Block a user