车间库存列表补齐关联字段select_related,消除剩余N+1

WMaterialViewSet 列表序列化查询数从随行数线性增长降为常数1条:
- 补 mgroup/material_ofrom/material_origin/defect 的 select_related
- material_ofrom/material_origin 用 StringRelatedField(__str__ 取 process.name),
  故用 __process 嵌套路径带上工序表, 避免每行回查 mtm_process

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
caoqianming 2026-07-16 12:03:47 +08:00
parent 1e94027e17
commit 4050d41370
1 changed files with 3 additions and 1 deletions

View File

@ -176,7 +176,9 @@ class WMaterialViewSet(CustomCreateModelMixin, DestroyModelMixin, CustomListMode
queryset = WMaterial.objects.filter(count__gt=0) queryset = WMaterial.objects.filter(count__gt=0)
serializer_class = WMaterialSerializer serializer_class = WMaterialSerializer
create_serializer_class = WMaterialCreateSerializer create_serializer_class = WMaterialCreateSerializer
select_related_fields = ["material", "belong_dept", "material__process", "supplier"] # material_ofrom/material_origin 用 StringRelatedField, 其 __str__ 会取 process.name, 故带上 __process
select_related_fields = ["material__process", "belong_dept", "supplier", "mgroup",
"material_ofrom__process", "material_origin__process", "defect"]
search_fields = ["material__name", "material__specification", "batch", "material__model", "defect__name", "notok_sign"] search_fields = ["material__name", "material__specification", "batch", "material__model", "defect__name", "notok_sign"]
filterset_class = WMaterialFilter filterset_class = WMaterialFilter
ordering_fields = ["update_time", "state", "count", "count_xtest"] ordering_fields = ["update_time", "state", "count", "count_xtest"]