diff --git a/apps/qm/models.py b/apps/qm/models.py index 6e524f12..01673765 100644 --- a/apps/qm/models.py +++ b/apps/qm/models.py @@ -343,14 +343,6 @@ class Ftest(CommonBDModel): FtestWork, verbose_name='关联检验工作', on_delete=models.CASCADE, null=True, blank=True) defect_main = models.ForeignKey(Defect, verbose_name='主要缺陷', on_delete=models.SET_NULL, null=True, blank=True) - @property - def ftestitems(self): - return FtestItem.objects.filter(ftest=self) - - @property - def ftestdefects(self): - return FtestDefect.objects.filter(ftest=self) - @classmethod def init_by_qct(cls, qct, test_user, test_date): ftest = Ftest.objects.create(qct=qct, test_user=test_user, test_date=test_date) @@ -385,7 +377,7 @@ class FtestItem(BaseModel): TN:检测明细 """ ftest = models.ForeignKey( - Ftest, verbose_name='关联检验', on_delete=models.CASCADE) + Ftest, verbose_name='关联检验', on_delete=models.CASCADE, related_name='items_ftest') testitem = models.ForeignKey( TestItem, verbose_name='质检项目', on_delete=models.CASCADE) test_equip = models.ForeignKey(Equipment, verbose_name='检测设备', on_delete=models.SET_NULL, null=True, blank=True) diff --git a/apps/qm/serializers.py b/apps/qm/serializers.py index 4ae63cfe..ce55c806 100644 --- a/apps/qm/serializers.py +++ b/apps/qm/serializers.py @@ -347,8 +347,8 @@ class FtestItemProcessSerializer(CustomModelSerializer): class FtestProcessSerializer(CustomModelSerializer): test_user_name = serializers.CharField( source='test_user.name', read_only=True) - ftestitems = FtestItemProcessSerializer(label='检验明细', many=True) - ftestdefects = FtestDefectSerializer(label='缺陷明细', many=True) + ftestitems = FtestItemProcessSerializer(source='items_ftest', many=True) + ftestdefects = FtestDefectSerializer(source='defects_ftest', many=True) class Meta: model = Ftest diff --git a/apps/wpm/views.py b/apps/wpm/views.py index c591c8db..be24dee6 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -67,7 +67,7 @@ from drf_yasg.utils import swagger_auto_schema from drf_yasg import openapi from django.db import connection from django.db.models.functions import Substr, Length - +from apps.qm.models import FtestDefect, FtestItem # Create your views here. @@ -1076,14 +1076,26 @@ class MlogbwViewSet(CustomModelViewSet): serializer_class = MlogbwCreateUpdateSerializer filterset_class = MlogbwFilter select_related_fields = ["ftest", "equip", "wpr", "mlogb"] + prefetch_related_fields = [ + Prefetch( + "ftest__items_ftest", + queryset=FtestItem.objects.select_related( + "testitem", + "test_user", + "test_equip", + ) + ), + Prefetch( + "ftest__defects_ftest", + queryset=FtestDefect.objects.select_related( + "defect", + "test_user", + ) + ), + ] ordering = ["mlogb", "number", "create_time"] ordering_fields = ["number", "create_time", "mlogb"] - # def filter_queryset(self, queryset): - # if not self.detail and not self.request.query_params.get('mlogb', None): - # raise ParseError('请指定所属消耗/产出明细') - # return super().filter_queryset(queryset) - def perform_create(self, serializer): ins: Mlogbw = serializer.save() mlog: Mlog = None