2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-12-17 17:58:22 +00:00

[Refactoring] Data Export (#8950)

* Allow extraction of "child" fields when exporting serialized data

* Update StockItemSerializer

* Add missing default attribute

* Cleanup export for BuildItemSerializer

* Refactor BuildLineSerializer

* Refactor BomItemSerializer

* Auto-exclude tags from export (for now)

* Cleanup SupplierPartSerializer

* Updated unit test

* Cleanup

* Bump API version

* Reduce serializer complexity

* Refactor StockLocation API endpoints

* Cleanup API

* Enhanced docstrings
This commit is contained in:
Oliver
2025-01-27 14:03:40 +11:00
committed by GitHub
parent 5968f5670f
commit ddcb7980ff
11 changed files with 285 additions and 244 deletions

View File

@@ -315,6 +315,16 @@ class SupplierPartSerializer(
):
"""Serializer for SupplierPart object."""
export_exclude_fields = ['tags']
export_child_fields = [
'part_detail.name',
'part_detail.description',
'part_detail.IPN',
'supplier_detail.name',
'manufacturer_detail.name',
]
class Meta:
"""Metaclass options."""
@@ -327,12 +337,10 @@ class SupplierPartSerializer(
'on_order',
'link',
'active',
'manufacturer',
'manufacturer_detail',
'manufacturer_part',
'manufacturer_part_detail',
'MPN',
'name',
'note',
'pk',
'barcode_hash',
@@ -393,6 +401,7 @@ class SupplierPartSerializer(
if brief:
self.fields.pop('tags')
self.fields.pop('available')
self.fields.pop('on_order')
self.fields.pop('availability_updated')
# Annotated field showing total in-stock quantity
@@ -405,32 +414,36 @@ class SupplierPartSerializer(
pack_quantity_native = serializers.FloatField(read_only=True)
part_detail = part_serializers.PartBriefSerializer(
source='part', many=False, read_only=True
label=_('Part'), source='part', many=False, read_only=True
)
supplier_detail = CompanyBriefSerializer(
source='supplier', many=False, read_only=True
label=_('Supplier'), source='supplier', many=False, read_only=True
)
manufacturer_detail = CompanyBriefSerializer(
source='manufacturer_part.manufacturer', many=False, read_only=True
label=_('Manufacturer'),
source='manufacturer_part.manufacturer',
many=False,
read_only=True,
)
pretty_name = serializers.CharField(read_only=True)
supplier = serializers.PrimaryKeyRelatedField(
queryset=Company.objects.filter(is_supplier=True)
label=_('Supplier'), queryset=Company.objects.filter(is_supplier=True)
)
manufacturer = serializers.CharField(read_only=True)
MPN = serializers.CharField(read_only=True)
manufacturer_part_detail = ManufacturerPartSerializer(
source='manufacturer_part', part_detail=False, read_only=True
label=_('Manufacturer Part'),
source='manufacturer_part',
part_detail=False,
read_only=True,
)
name = serializers.CharField(read_only=True)
MPN = serializers.CharField(
source='manufacturer_part.MPN', read_only=True, label=_('MPN')
)
url = serializers.CharField(source='get_absolute_url', read_only=True)