feat: 优化mlogbw list接口速度

This commit is contained in:
caoqianming 2025-11-25 15:57:24 +08:00
parent 95604372a4
commit 1074fd35bd
3 changed files with 21 additions and 17 deletions

View File

@ -343,14 +343,6 @@ class Ftest(CommonBDModel):
FtestWork, verbose_name='关联检验工作', on_delete=models.CASCADE, null=True, blank=True) 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) 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 @classmethod
def init_by_qct(cls, qct, test_user, test_date): def init_by_qct(cls, qct, test_user, test_date):
ftest = Ftest.objects.create(qct=qct, test_user=test_user, test_date=test_date) ftest = Ftest.objects.create(qct=qct, test_user=test_user, test_date=test_date)
@ -385,7 +377,7 @@ class FtestItem(BaseModel):
TN:检测明细 TN:检测明细
""" """
ftest = models.ForeignKey( 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 = models.ForeignKey(
TestItem, verbose_name='质检项目', on_delete=models.CASCADE) TestItem, verbose_name='质检项目', on_delete=models.CASCADE)
test_equip = models.ForeignKey(Equipment, verbose_name='检测设备', on_delete=models.SET_NULL, null=True, blank=True) test_equip = models.ForeignKey(Equipment, verbose_name='检测设备', on_delete=models.SET_NULL, null=True, blank=True)

View File

@ -347,8 +347,8 @@ class FtestItemProcessSerializer(CustomModelSerializer):
class FtestProcessSerializer(CustomModelSerializer): class FtestProcessSerializer(CustomModelSerializer):
test_user_name = serializers.CharField( test_user_name = serializers.CharField(
source='test_user.name', read_only=True) source='test_user.name', read_only=True)
ftestitems = FtestItemProcessSerializer(label='检验明细', many=True) ftestitems = FtestItemProcessSerializer(source='items_ftest', many=True)
ftestdefects = FtestDefectSerializer(label='缺陷明细', many=True) ftestdefects = FtestDefectSerializer(source='defects_ftest', many=True)
class Meta: class Meta:
model = Ftest model = Ftest

View File

@ -67,7 +67,7 @@ from drf_yasg.utils import swagger_auto_schema
from drf_yasg import openapi from drf_yasg import openapi
from django.db import connection from django.db import connection
from django.db.models.functions import Substr, Length from django.db.models.functions import Substr, Length
from apps.qm.models import FtestDefect, FtestItem
# Create your views here. # Create your views here.
@ -1076,14 +1076,26 @@ class MlogbwViewSet(CustomModelViewSet):
serializer_class = MlogbwCreateUpdateSerializer serializer_class = MlogbwCreateUpdateSerializer
filterset_class = MlogbwFilter filterset_class = MlogbwFilter
select_related_fields = ["ftest", "equip", "wpr", "mlogb"] 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 = ["mlogb", "number", "create_time"]
ordering_fields = ["number", "create_time", "mlogb"] 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): def perform_create(self, serializer):
ins: Mlogbw = serializer.save() ins: Mlogbw = serializer.save()
mlog: Mlog = None mlog: Mlog = None