from rest_framework import serializers from .models import ContainerListModel,ContainerDetailModel,ContainerOperationModel from bound.models import BoundBatchModel from utils import datasolve class ContainerListGetSerializer(serializers.ModelSerializer): # 定义主单列表的序列化器,用于获取操作,字段只读 container_code = serializers.IntegerField(read_only=True, required=False) current_location = serializers.CharField(read_only=True, required=False) target_location = serializers.CharField(read_only=True, required=False) status = serializers.IntegerField(read_only=True, required=False) last_operation = serializers.DateTimeField(read_only=True, format='%Y-%m-%d', required=False) class Meta: # 指定模型和排除字段 model = ContainerListModel fields= '__all__' read_only_fields = ['id'] class ContainerListPostSerializer(serializers.ModelSerializer): # 定义主单列表的序列化器,用于创建操作,允许部分字段写入 container_code = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.data_validate]) current_location = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate]) target_location = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate]) status = serializers.IntegerField(read_only=False, required=False, validators=[datasolve.data_validate]) last_operation = serializers.DateTimeField(read_only=False, format='%Y-%m-%d', required=False, validators=[datasolve.data_validate]) class Meta: # 指定模型和排除字段 model = ContainerListModel fields= '__all__' read_only_fields = ['id' ] class ContainerDetailGetSerializer(serializers.ModelSerializer): # 定义明细单列表的序列化器,用于获取操作,字段只读 month = serializers.IntegerField(read_only=True, required=False) container = serializers.SerializerMethodField() batch = serializers.SerializerMethodField() goods_code = serializers.CharField(read_only=True, required=False) goods_desc = serializers.CharField(read_only=True, required=False) goods_qty = serializers.IntegerField(read_only=True, required=False) goods_weight = serializers.DecimalField(read_only=True, required=False, max_digits=10, decimal_places=2) status = serializers.IntegerField(read_only=True, required=False) creater = serializers.CharField(read_only=True, required=False) create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M', required=False) update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M', required=False) def get_container(self, obj): """ 动态序列化关联的主单数据 """ from .serializers import ContainerListGetSerializer return ContainerListGetSerializer(obj.container).data def get_batch(self, obj): """ 动态序列化关联的批次数据 """ from bound.serializers import BoundBatchGetSerializer return BoundBatchGetSerializer(obj.batch).data class Meta: # 指定模型和排除字段 model = ContainerDetailModel exclude = ['id', 'is_delete', ] read_only_fields = ['id'] class ContainerDetailPostSerializer(serializers.ModelSerializer): # 定义明细单列表的序列化器,用于创建操作,允许部分字段写入 month = serializers.IntegerField(read_only=False, required=False, validators=[datasolve.data_validate]) container = serializers.PrimaryKeyRelatedField(queryset=ContainerListModel.objects.all(), help_text='关联的主单', error_messages = { 'null': '请选择关联的主单', 'does_not_exist': '关联的主单不存在', 'incorrect_type': '关联的主单格式错误' }, required=False, validators=[datasolve.data_validate]) batch = serializers.PrimaryKeyRelatedField(queryset=BoundBatchModel.objects.all(), help_text='关联的批次', error_messages = { 'null': '请选择关联的批次', 'does_not_exist': '关联的批次不存在', 'incorrect_type': '关联的批次格式错误' }, required=False, validators=[datasolve.data_validate]) goods_code = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate]) goods_desc = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate]) goods_qty = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.data_validate]) goods_weight = serializers.DecimalField(read_only=False, required=True, max_digits=10, decimal_places=2, validators=[datasolve.data_validate]) status = serializers.IntegerField(read_only=False, required=False, validators=[datasolve.data_validate]) creater = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate]) create_time = serializers.DateTimeField(read_only=False, format='%Y-%m-%d %H:%M', required=False, validators=[datasolve.data_validate]) update_time = serializers.DateTimeField(read_only=False, format='%Y-%m-%d %H:%M', required=False, validators=[datasolve.data_validate]) class Meta: # 指定模型和排除字段 model = ContainerDetailModel fields= '__all__' read_only_fields = ['id'] class ContainerOperationGetSerializer(serializers.ModelSerializer): # 定义操作记录的序列化器,用于获取操作,字段只读 month = serializers.IntegerField(read_only=True, required=False) container = serializers.SerializerMethodField() operation_type = serializers.CharField(read_only=True, required=False) batch = serializers.SerializerMethodField() goods_code = serializers.CharField(read_only=True, required=False) goods_desc = serializers.CharField(read_only=True, required=False) goods_qty = serializers.IntegerField(read_only=True, required=False) goods_weight = serializers.DecimalField(read_only=True, required=False, max_digits=10, decimal_places=2) operator = serializers.CharField(read_only=True, required=False) timestamp = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M', required=False) from_location = serializers.CharField(read_only=True, required=False) to_location = serializers.CharField(read_only=True, required=False) memo = serializers.CharField(read_only=True, required=False) def get_container(self, obj): """ 动态序列化关联的主单数据 """ from .serializers import ContainerListGetSerializer return ContainerListGetSerializer(obj.container).data def get_batch(self, obj): """ 动态序列化关联的批次数据 """ from bound.serializers import BoundBatchGetSerializer return BoundBatchGetSerializer(obj.batch).data class Meta: # 指定模型和排除字段 model = ContainerOperationModel fields= '__all__' read_only_fields = ['id'] class ContainerOperationPostSerializer(serializers.ModelSerializer): # 定义操作记录的序列化器,用于创建操作,允许部分字段写入 month = serializers.IntegerField(read_only=False, required=False, validators=[datasolve.data_validate]) container = serializers.PrimaryKeyRelatedField(queryset=ContainerListModel.objects.all(), help_text='关联的主单', error_messages = { 'null': '请选择关联的主单', 'does_not_exist': '关联的主单不存在', 'incorrect_type': '关联的主单格式错误' }, required=True, validators=[datasolve.data_validate]) operation_type = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate]) batch = serializers.PrimaryKeyRelatedField(queryset=BoundBatchModel.objects.all(), help_text='关联的批次', error_messages = { 'null': '请选择关联的批次', 'does_not_exist': '关联的批次不存在', 'incorrect_type': '关联的批次格式错误' }, required=True, validators=[datasolve.data_validate]) goods_code = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate]) goods_desc = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate]) goods_qty = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.data_validate]) goods_weight = serializers.DecimalField(read_only=False, required=True, max_digits=10, decimal_places=2, validators=[datasolve.data_validate]) operator = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate]) timestamp = serializers.DateTimeField(read_only=False, format='%Y-%m-%d %H:%M', required=True, validators=[datasolve.data_validate]) from_location = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate]) to_location = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate]) memo = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate]) class Meta: # 指定模型和排除字段 model = ContainerOperationModel fields= '__all__' read_only_fields = ['id']