From 18070041296bd362813d0781c09b4df695ccac52 Mon Sep 17 00:00:00 2001 From: shijing Date: Fri, 22 May 2026 15:36:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:wpr=E4=B8=AD=E6=B7=BB=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E8=A3=85=EF=BC=88=E5=96=B7=E7=A0=81=E5=B7=A5=E6=AE=B5=E9=9C=80?= =?UTF-8?q?=E8=A6=81=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wpmw/models.py | 3 ++- apps/wpmw/serializers.py | 13 ++++++++++--- apps/wpmw/views.py | 11 ++++++----- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/apps/wpmw/models.py b/apps/wpmw/models.py index 8478da90..4a030939 100644 --- a/apps/wpmw/models.py +++ b/apps/wpmw/models.py @@ -2,7 +2,7 @@ from django.db import models from apps.qm.models import FtestDefect, FtestItem from apps.utils.models import BaseModel -from apps.mtm.models import Material +from apps.mtm.models import Material, Tooling from rest_framework.exceptions import ParseError from apps.wpm.models import WmStateOption, Mlogbw, Handoverbw from apps.utils.tools import update_dict @@ -30,6 +30,7 @@ class Wpr(BaseModel): oinfo = models.JSONField(verbose_name="其他信息", default=dict, blank=True) wpr_from = models.ForeignKey("self", verbose_name="来源于", on_delete=models.CASCADE, null=True, blank=True) data = models.JSONField(verbose_name="数据", default=dict, blank=True) + tooling = models.ForeignKey(Tooling, verbose_name="工装", on_delete=models.SET_NULL, null=True, blank=True) @classmethod def change_or_new(cls, wpr=None, number=None, mb=None, wm=None, old_mb=None, old_wm=None, ftest=None, wpr_from=None, add_version=True, number_out=None): diff --git a/apps/wpmw/serializers.py b/apps/wpmw/serializers.py index 707d74eb..c1f55cdb 100644 --- a/apps/wpmw/serializers.py +++ b/apps/wpmw/serializers.py @@ -16,10 +16,11 @@ class WprSerializer(CustomModelSerializer): wm_batch = serializers.CharField(source="wm.batch", read_only=True) mb_batch = serializers.CharField(source="mb.batch", read_only=True) material_name = serializers.StringRelatedField( - source='material', read_only=True) + source='material', read_only=True) # material_start_name = serializers.StringRelatedField(source='material_start', read_only=True) wm_material_ofrom_name = serializers.StringRelatedField(source="wm.material_ofrom", read_only=True) - wprdefect = WprDefectSerializer(many=True, read_only=True) + wprdefect = WprDefectSerializer(many=True, read_only=True) + tooling_name = serializers.CharField(source="tooling.name", read_only=True, default=None) class Meta: model = Wpr @@ -54,4 +55,10 @@ class WproutListSerializer(serializers.Serializer): class WprChangeNumberSerializer(serializers.Serializer): old_number = serializers.CharField(label="原编号") - new_number = serializers.CharField(label="新编号") \ No newline at end of file + new_number = serializers.CharField(label="新编号") + + +class WprPartialUpdateSerializer(CustomModelSerializer): + class Meta: + model = Wpr + fields = ['tooling'] \ No newline at end of file diff --git a/apps/wpmw/views.py b/apps/wpmw/views.py index 2e91a6df..58dc8f7b 100644 --- a/apps/wpmw/views.py +++ b/apps/wpmw/views.py @@ -1,9 +1,9 @@ from rest_framework.decorators import action from apps.utils.viewsets import CustomModelViewSet, CustomGenericViewSet -from apps.utils.mixins import CustomListModelMixin, CustomRetrieveModelMixin, ComplexQueryMixin +from apps.utils.mixins import CustomListModelMixin, CustomRetrieveModelMixin, ComplexQueryMixin, CustomUpdateModelMixin from apps.wpmw.models import Wpr, WprDefect -from apps.wpmw.serializers import WprSerializer, WprNewSerializer, WprDetailSerializer, WproutListSerializer, WprChangeNumberSerializer +from apps.wpmw.serializers import WprSerializer, WprNewSerializer, WprDetailSerializer, WproutListSerializer, WprChangeNumberSerializer, WprPartialUpdateSerializer from rest_framework.response import Response from apps.mtm.models import Material from rest_framework.exceptions import ParseError @@ -13,14 +13,15 @@ from apps.utils.sql import query_one_dict from django.db.models.expressions import RawSQL -class WprViewSet(CustomListModelMixin, CustomRetrieveModelMixin, ComplexQueryMixin, CustomGenericViewSet): +class WprViewSet(CustomUpdateModelMixin, CustomListModelMixin, CustomRetrieveModelMixin, ComplexQueryMixin, CustomGenericViewSet): """动态产品 动态产品 """ - perms_map = {"get": "*"} - select_related_fields = ["wm", "mb", "material", "wm__material_ofrom"] + perms_map = {"get": "*", "patch": "*"} + partial_update_serializer_class = WprPartialUpdateSerializer + select_related_fields = ["wm", "mb", "material", "wm__material_ofrom", "tooling"] prefetch_related_fields = ["defects"] queryset = Wpr.objects.all() serializer_class = WprSerializer