123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- from rest_framework import serializers
- from .models import ContainerListModel,ContainerDetailModel,ContainerOperationModel,TaskModel,ContainerWCSModel
- from bound.models import BoundBatchModel,BoundDetailModel
- from utils import datasolve
- class WCSTaskGetSerializer(serializers.ModelSerializer):
- class Meta:
- # 指定模型和排除字段
- model = ContainerWCSModel
- fields= '__all__'
- read_only_fields = ['id']
- 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)
- goods_class = serializers.IntegerField(read_only=True, required=False)
- 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 = {
-
- '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=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])
- 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']
- class TaskGetSerializer(serializers.ModelSerializer):
- # 定义任务记录的序列化器,用于获取操作,字段只读
- task_wcs = serializers.SerializerMethodField()
- container_detail = serializers.SerializerMethodField()
- batch_detail = serializers.SerializerMethodField()
- def get_task_wcs(self, obj):
- """ 动态序列化关联的WCS任务数据 """
- from .models import ContainerWCSModel
- return ContainerWCSModel.objects.filter(id=obj.task_wcs_id).first().to_dict()
- def get_container_detail(self, obj):
- """ 动态序列化关联的主单数据 """
- from .serializers import ContainerDetailGetSerializer
- return ContainerDetailGetSerializer(obj.container_detail).data
- def get_batch_detail(self, obj):
- """ 动态序列化关联的批次数据 """
- from bound.serializers import BoundDetailGetSerializer
- return BoundDetailGetSerializer(obj.batch_detail).data
- class Meta:
- # 指定模型和排除字段
- model = TaskModel
- fields= '__all__'
- read_only_fields = ['id']
- class TaskPostSerializer(serializers.ModelSerializer):
- # 定义任务记录的序列化器,用于获取操作,字段只读
- task_wcs = serializers.PrimaryKeyRelatedField(queryset=ContainerWCSModel.objects.all(),
- help_text='关联的WCS任务',
- error_messages = {
- 'null': '请选择关联的WCS任务',
- 'does_not_exist': '关联的WCS任务不存在',
- 'incorrect_type': '关联的WCS任务格式错误'
- },
- required=False, validators=[datasolve.data_validate])
- bound_detail = serializers.PrimaryKeyRelatedField(queryset=BoundDetailModel.objects.all(),
- help_text='关联的明细单',
- error_messages = {
- 'null': '请选择关联的明细单',
- 'does_not_exist': '关联的明细单不存在',
- 'incorrect_type': '关联的明细单格式错误'
- },
- required=False, validators=[datasolve.data_validate])
- class Meta:
- # 指定模型和排除字段
- model = TaskModel
- fields= '__all__'
- read_only_fields = ['id']
-
|