|
9 | 9 |
|
10 | 10 | from InvenTree.helpers import normalize |
11 | 11 | from part.models import BomItem |
| 12 | +from part.serializers import BomItemSerializer |
12 | 13 | from plugin import InvenTreePlugin |
13 | 14 | from plugin.mixins import DataExportMixin |
14 | 15 |
|
@@ -76,7 +77,10 @@ class BomExporterPlugin(DataExportMixin, InvenTreePlugin): |
76 | 77 |
|
77 | 78 | def supports_export(self, model_class: type, user, *args, **kwargs) -> bool: |
78 | 79 | """This exported only supports the BomItem model.""" |
79 | | - return model_class == BomItem |
| 80 | + return ( |
| 81 | + model_class == BomItem |
| 82 | + and kwargs.get('serializer_class') == BomItemSerializer |
| 83 | + ) |
80 | 84 |
|
81 | 85 | def update_headers(self, headers, context, **kwargs): |
82 | 86 | """Update headers for the BOM export.""" |
@@ -149,17 +153,23 @@ def prefetch_queryset(self, queryset): |
149 | 153 | queryset = queryset.prefetch_related('substitutes') |
150 | 154 |
|
151 | 155 | if self.export_supplier_data: |
152 | | - queryset = queryset.prefetch_related('sub_part__supplier_parts') |
153 | 156 | queryset = queryset.prefetch_related( |
154 | | - 'sub_part__supplier_parts__manufacturer_part' |
| 157 | + 'sub_part__supplier_parts', |
| 158 | + 'sub_part__supplier_parts__supplier', |
| 159 | + 'sub_part__supplier_parts__manufacturer_part', |
| 160 | + 'sub_part__supplier_parts__manufacturer_part__manufacturer', |
155 | 161 | ) |
156 | 162 |
|
157 | 163 | if self.export_manufacturer_data: |
158 | | - queryset = queryset.prefetch_related('sub_part__manufacturer_parts') |
| 164 | + queryset = queryset.prefetch_related( |
| 165 | + 'sub_part__manufacturer_parts', |
| 166 | + 'sub_part__manufacturer_parts__manufacturer', |
| 167 | + ) |
159 | 168 |
|
160 | 169 | if self.export_parameter_data: |
161 | | - queryset = queryset.prefetch_related('sub_part__parameters_list') |
162 | | - queryset = queryset.prefetch_related('sub_part__parameters_list__template') |
| 170 | + queryset = queryset.prefetch_related( |
| 171 | + 'sub_part__parameters_list', 'sub_part__parameters_list__template' |
| 172 | + ) |
163 | 173 |
|
164 | 174 | return queryset |
165 | 175 |
|
@@ -242,6 +252,7 @@ def process_bom_row( |
242 | 252 | ): |
243 | 253 | sub_items = bom_item.sub_part.get_bom_items() |
244 | 254 | sub_items = self.prefetch_queryset(sub_items) |
| 255 | + sub_items = BomItemSerializer.annotate_queryset(sub_items) |
245 | 256 |
|
246 | 257 | for item in sub_items.all(): |
247 | 258 | self.process_bom_row( |
|
0 commit comments