在需要的list接口增加动态字段

This commit is contained in:
caoqianming 2022-01-26 11:06:23 +08:00
parent a2c025cdf2
commit 0955a208cf
11 changed files with 47 additions and 10 deletions

View File

@ -0,0 +1,24 @@
from django_filters import rest_framework as filters
from apps.em.models import Equipment
from datetime import *
from utils.mixins import DynamicFieldsFilterMixin
class EquipFilterSet(DynamicFieldsFilterMixin, filters.FilterSet):
tag = filters.CharFilter(method='filter_tag')
class Meta:
model = Equipment
fields = ['keeper', 'type', 'tag']
def filter_tag(self, queryset, name, value):
now = datetime.now()
day7_after = now + timedelta(days=7)
if value == 'near_check':
queryset = queryset.filter(
next_check_date__lte = datetime.date(day7_after))
elif value == 'out_check':
queryset = queryset.filter(
next_check_date__gt = datetime.date(now))
return queryset

View File

@ -2,11 +2,13 @@ from apps.mtm.models import Step
from rest_framework import serializers from rest_framework import serializers
from rest_framework.serializers import ModelSerializer from rest_framework.serializers import ModelSerializer
from rest_framework import exceptions from rest_framework import exceptions
from utils.mixins import DynamicFieldsSerializerMixin
from .models import Equipment, ECheckRecord from .models import Equipment, ECheckRecord
from apps.system.serializers import OrganizationSimpleSerializer, UserSimpleSerializer from apps.system.serializers import OrganizationSimpleSerializer, UserSimpleSerializer
class EquipmentListSerializer(ModelSerializer): class EquipmentListSerializer(DynamicFieldsSerializerMixin, ModelSerializer):
keeper_ = UserSimpleSerializer(source='keeper', read_only=True) keeper_ = UserSimpleSerializer(source='keeper', read_only=True)
step_ = serializers.SerializerMethodField() step_ = serializers.SerializerMethodField()
class Meta: class Meta:

View File

@ -7,6 +7,7 @@ from rest_framework.viewsets import ModelViewSet, GenericViewSet
from rest_framework.mixins import CreateModelMixin, RetrieveModelMixin, ListModelMixin, DestroyModelMixin from rest_framework.mixins import CreateModelMixin, RetrieveModelMixin, ListModelMixin, DestroyModelMixin
from rest_framework import serializers, status from rest_framework import serializers, status
from rest_framework.response import Response from rest_framework.response import Response
from apps.em.filters import EquipFilterSet
from apps.em.models import Equipment, ECheckRecord from apps.em.models import Equipment, ECheckRecord
from apps.em.serializers import DaqCreateSerializer, EChcekRecordCreateSerializer, ECheckRecordListSerializer, \ from apps.em.serializers import DaqCreateSerializer, EChcekRecordCreateSerializer, ECheckRecordListSerializer, \
EquipmentCreateUpdateSerializer, EquipmentListSerializer EquipmentCreateUpdateSerializer, EquipmentListSerializer
@ -26,7 +27,7 @@ class EquipmentViewSet(CreateUpdateModelAMixin, OptimizationMixin, ModelViewSet)
queryset = Equipment.objects.all() queryset = Equipment.objects.all()
serializer_class = EquipmentListSerializer serializer_class = EquipmentListSerializer
search_fields = ['number', 'name','description'] search_fields = ['number', 'name','description']
filterset_fields = ['keeper', 'type'] filterset_class = EquipFilterSet
ordering_fields = ['create_time'] ordering_fields = ['create_time']
ordering = ['-create_time'] ordering = ['-create_time']

View File

@ -5,7 +5,7 @@ from .models import IProduct, MaterialBatch
from django.utils import timezone from django.utils import timezone
from utils.mixins import DynamicFieldsFilterMixin from utils.mixins import DynamicFieldsFilterMixin
class MbFilterSet(filters.FilterSet): class MbFilterSet(DynamicFieldsFilterMixin, filters.FilterSet):
material = filters.ModelMultipleChoiceFilter(field_name="material", queryset=Material.objects.all()) material = filters.ModelMultipleChoiceFilter(field_name="material", queryset=Material.objects.all())
tag = filters.CharFilter(method="filter_tag") tag = filters.CharFilter(method="filter_tag")

View File

@ -42,7 +42,7 @@ class InventorySerializer(serializers.ModelSerializer):
fields = '__all__' fields = '__all__'
class MaterialBatchSerializer(serializers.ModelSerializer): class MaterialBatchSerializer(DynamicFieldsSerializerMixin, serializers.ModelSerializer):
material_ = MaterialSimpleSerializer(source='material', read_only=True) material_ = MaterialSimpleSerializer(source='material', read_only=True)
warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True) warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True)

View File

@ -1,6 +1,7 @@
from django.db.models.expressions import F from django.db.models.expressions import F
from django_filters import rest_framework as filters from django_filters import rest_framework as filters
from apps.mtm.models import Material, TechDoc from apps.mtm.models import Material, TechDoc
from utils.mixins import DynamicFieldsFilterMixin
@ -15,7 +16,7 @@ class TechDocFilterset(filters.FilterSet):
def filter_operation(self, queryset, name, value): def filter_operation(self, queryset, name, value):
return queryset.filter(subproduction__subplan_subprod__ow_subplan__operation=value).distinct() return queryset.filter(subproduction__subplan_subprod__ow_subplan__operation=value).distinct()
class MaterialFilterSet(filters.FilterSet): class MaterialFilterSet(DynamicFieldsFilterMixin, filters.FilterSet):
tag = filters.CharFilter(method='filter_tag') tag = filters.CharFilter(method='filter_tag')
class Meta: class Meta:
model = Material model = Material

View File

@ -1,11 +1,13 @@
from apps.em.serializers import EquipmentSimpleSerializer from apps.em.serializers import EquipmentSimpleSerializer
from rest_framework import serializers from rest_framework import serializers
from rest_framework.exceptions import ParseError, ValidationError from rest_framework.exceptions import ParseError, ValidationError
from utils.mixins import DynamicFieldsSerializerMixin
from .models import Material, Process, RecordForm, RecordFormField, Step, SubprodctionMaterial, TechDoc, UsedStep, SubProduction from .models import Material, Process, RecordForm, RecordFormField, Step, SubprodctionMaterial, TechDoc, UsedStep, SubProduction
from apps.system.serializers import FileSimpleSerializer, OrganizationSimpleSerializer from apps.system.serializers import FileSimpleSerializer, OrganizationSimpleSerializer
class MaterialSerializer(serializers.ModelSerializer): class MaterialSerializer(DynamicFieldsSerializerMixin, serializers.ModelSerializer):
class Meta: class Meta:
model = Material model = Material
fields = '__all__' fields = '__all__'

View File

@ -6,7 +6,9 @@ from datetime import *
from apps.wpm.services import WpmServies from apps.wpm.services import WpmServies
from django.db.models import F from django.db.models import F
class PlanFilterSet(filters.FilterSet): from utils.mixins import DynamicFieldsFilterMixin
class PlanFilterSet(DynamicFieldsFilterMixin, filters.FilterSet):
create_time_start = filters.DateFilter(field_name="create_time", lookup_expr='gte') create_time_start = filters.DateFilter(field_name="create_time", lookup_expr='gte')
create_time_end = filters.DateFilter(field_name="create_time", lookup_expr='lte') create_time_end = filters.DateFilter(field_name="create_time", lookup_expr='lte')
tag = filters.CharFilter(method='filter_tag') tag = filters.CharFilter(method='filter_tag')

View File

@ -3,6 +3,7 @@ from rest_framework import serializers
from apps.sam.serializers import OrderSerializer, OrderSimpleSerializer from apps.sam.serializers import OrderSerializer, OrderSimpleSerializer
from apps.mtm.serializers import MaterialSimpleSerializer, ProcessSimpleSerializer, SubProductionSimpleSerializer from apps.mtm.serializers import MaterialSimpleSerializer, ProcessSimpleSerializer, SubProductionSimpleSerializer
from apps.system.serializers import OrganizationSimpleSerializer from apps.system.serializers import OrganizationSimpleSerializer
from utils.mixins import DynamicFieldsSerializerMixin
class ProductionPlanCreateFromOrderSerializer(serializers.ModelSerializer): class ProductionPlanCreateFromOrderSerializer(serializers.ModelSerializer):
@ -10,7 +11,7 @@ class ProductionPlanCreateFromOrderSerializer(serializers.ModelSerializer):
model = ProductionPlan model = ProductionPlan
fields = ['order', 'count', 'start_date', 'end_date'] fields = ['order', 'count', 'start_date', 'end_date']
class ProductionPlanSerializer(serializers.ModelSerializer): class ProductionPlanSerializer(DynamicFieldsSerializerMixin, serializers.ModelSerializer):
order_ = OrderSimpleSerializer(source='order', read_only=True) order_ = OrderSimpleSerializer(source='order', read_only=True)
product_ = MaterialSimpleSerializer(source='product', read_only=True) product_ = MaterialSimpleSerializer(source='product', read_only=True)
class Meta: class Meta:

View File

@ -4,8 +4,10 @@ from apps.sam.models import Order
from django.db.models import F from django.db.models import F
from datetime import datetime, timedelta from datetime import datetime, timedelta
from utils.mixins import DynamicFieldsFilterMixin
class OrderFilterSet(filters.FilterSet):
class OrderFilterSet(DynamicFieldsFilterMixin, filters.FilterSet):
create_time_start = filters.DateFilter(field_name="create_time", lookup_expr='gte') create_time_start = filters.DateFilter(field_name="create_time", lookup_expr='gte')
create_time_end = filters.DateFilter(field_name="create_time", lookup_expr='lte') create_time_end = filters.DateFilter(field_name="create_time", lookup_expr='lte')
material = filters.NumberFilter(method='filter_material') material = filters.NumberFilter(method='filter_material')

View File

@ -1,6 +1,8 @@
from rest_framework import serializers from rest_framework import serializers
from utils.mixins import DynamicFieldsSerializerMixin
from .models import Contract, Customer, Order from .models import Contract, Customer, Order
from apps.mtm.serializers import MaterialSimpleSerializer from apps.mtm.serializers import MaterialSimpleSerializer
@ -47,7 +49,7 @@ class OrderCreateUpdateSerializer(serializers.ModelSerializer):
validated_data['number'] = 'DD' + ranstr(7) validated_data['number'] = 'DD' + ranstr(7)
return super().create(validated_data) return super().create(validated_data)
class OrderSerializer(serializers.ModelSerializer): class OrderSerializer(DynamicFieldsSerializerMixin, serializers.ModelSerializer):
contract_ = ContractSimpleSerializer(source='contract', read_only=True) contract_ = ContractSimpleSerializer(source='contract', read_only=True)
customer_ = CustomerSimpleSerializer(source='customer', read_only=True) customer_ = CustomerSimpleSerializer(source='customer', read_only=True)
product_ = MaterialSimpleSerializer(source='product', read_only=True) product_ = MaterialSimpleSerializer(source='product', read_only=True)