serializers.py 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. from rest_framework import serializers
  2. from .models import ContainerListModel,ContainerDetailModel,ContainerOperationModel
  3. from bound.models import BoundBatchModel
  4. from utils import datasolve
  5. class ContainerListGetSerializer(serializers.ModelSerializer):
  6. # 定义主单列表的序列化器,用于获取操作,字段只读
  7. container_code = serializers.IntegerField(read_only=True, required=False)
  8. current_location = serializers.CharField(read_only=True, required=False)
  9. target_location = serializers.CharField(read_only=True, required=False)
  10. status = serializers.IntegerField(read_only=True, required=False)
  11. last_operation = serializers.DateTimeField(read_only=True, format='%Y-%m-%d', required=False)
  12. class Meta:
  13. # 指定模型和排除字段
  14. model = ContainerListModel
  15. fields= '__all__'
  16. read_only_fields = ['id']
  17. class ContainerListPostSerializer(serializers.ModelSerializer):
  18. # 定义主单列表的序列化器,用于创建操作,允许部分字段写入
  19. container_code = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.data_validate])
  20. current_location = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
  21. target_location = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
  22. status = serializers.IntegerField(read_only=False, required=False, validators=[datasolve.data_validate])
  23. last_operation = serializers.DateTimeField(read_only=False, format='%Y-%m-%d', required=False, validators=[datasolve.data_validate])
  24. class Meta:
  25. # 指定模型和排除字段
  26. model = ContainerListModel
  27. fields= '__all__'
  28. read_only_fields = ['id' ]
  29. class ContainerDetailGetSerializer(serializers.ModelSerializer):
  30. # 定义明细单列表的序列化器,用于获取操作,字段只读
  31. month = serializers.IntegerField(read_only=True, required=False)
  32. container = serializers.SerializerMethodField()
  33. batch = serializers.SerializerMethodField()
  34. goods_code = serializers.CharField(read_only=True, required=False)
  35. goods_desc = serializers.CharField(read_only=True, required=False)
  36. goods_qty = serializers.IntegerField(read_only=True, required=False)
  37. goods_weight = serializers.DecimalField(read_only=True, required=False, max_digits=10, decimal_places=2)
  38. status = serializers.IntegerField(read_only=True, required=False)
  39. creater = serializers.CharField(read_only=True, required=False)
  40. create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M', required=False)
  41. update_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M', required=False)
  42. def get_container(self, obj):
  43. """ 动态序列化关联的主单数据 """
  44. from .serializers import ContainerListGetSerializer
  45. return ContainerListGetSerializer(obj.container).data
  46. def get_batch(self, obj):
  47. """ 动态序列化关联的批次数据 """
  48. from bound.serializers import BoundBatchGetSerializer
  49. return BoundBatchGetSerializer(obj.batch).data
  50. class Meta:
  51. # 指定模型和排除字段
  52. model = ContainerDetailModel
  53. exclude = ['id', 'is_delete', ]
  54. read_only_fields = ['id']
  55. class ContainerDetailPostSerializer(serializers.ModelSerializer):
  56. # 定义明细单列表的序列化器,用于创建操作,允许部分字段写入
  57. month = serializers.IntegerField(read_only=False, required=False, validators=[datasolve.data_validate])
  58. container = serializers.PrimaryKeyRelatedField(queryset=ContainerListModel.objects.all(),
  59. help_text='关联的主单',
  60. error_messages = {
  61. 'null': '请选择关联的主单',
  62. 'does_not_exist': '关联的主单不存在',
  63. 'incorrect_type': '关联的主单格式错误'
  64. },
  65. required=False, validators=[datasolve.data_validate])
  66. batch = serializers.PrimaryKeyRelatedField(queryset=BoundBatchModel.objects.all(),
  67. help_text='关联的批次',
  68. error_messages = {
  69. 'null': '请选择关联的批次',
  70. 'does_not_exist': '关联的批次不存在',
  71. 'incorrect_type': '关联的批次格式错误'
  72. },
  73. required=False, validators=[datasolve.data_validate])
  74. goods_code = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
  75. goods_desc = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
  76. goods_qty = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.data_validate])
  77. goods_weight = serializers.DecimalField(read_only=False, required=True, max_digits=10, decimal_places=2, validators=[datasolve.data_validate])
  78. status = serializers.IntegerField(read_only=False, required=False, validators=[datasolve.data_validate])
  79. creater = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
  80. create_time = serializers.DateTimeField(read_only=False, format='%Y-%m-%d %H:%M', required=False, validators=[datasolve.data_validate])
  81. update_time = serializers.DateTimeField(read_only=False, format='%Y-%m-%d %H:%M', required=False, validators=[datasolve.data_validate])
  82. class Meta:
  83. # 指定模型和排除字段
  84. model = ContainerDetailModel
  85. fields= '__all__'
  86. read_only_fields = ['id']
  87. class ContainerOperationGetSerializer(serializers.ModelSerializer):
  88. # 定义操作记录的序列化器,用于获取操作,字段只读
  89. month = serializers.IntegerField(read_only=True, required=False)
  90. container = serializers.SerializerMethodField()
  91. operation_type = serializers.CharField(read_only=True, required=False)
  92. batch = serializers.SerializerMethodField()
  93. goods_code = serializers.CharField(read_only=True, required=False)
  94. goods_desc = serializers.CharField(read_only=True, required=False)
  95. goods_qty = serializers.IntegerField(read_only=True, required=False)
  96. goods_weight = serializers.DecimalField(read_only=True, required=False, max_digits=10, decimal_places=2)
  97. operator = serializers.CharField(read_only=True, required=False)
  98. timestamp = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M', required=False)
  99. from_location = serializers.CharField(read_only=True, required=False)
  100. to_location = serializers.CharField(read_only=True, required=False)
  101. memo = serializers.CharField(read_only=True, required=False)
  102. def get_container(self, obj):
  103. """ 动态序列化关联的主单数据 """
  104. from .serializers import ContainerListGetSerializer
  105. return ContainerListGetSerializer(obj.container).data
  106. def get_batch(self, obj):
  107. """ 动态序列化关联的批次数据 """
  108. from bound.serializers import BoundBatchGetSerializer
  109. return BoundBatchGetSerializer(obj.batch).data
  110. class Meta:
  111. # 指定模型和排除字段
  112. model = ContainerOperationModel
  113. fields= '__all__'
  114. read_only_fields = ['id']
  115. class ContainerOperationPostSerializer(serializers.ModelSerializer):
  116. # 定义操作记录的序列化器,用于创建操作,允许部分字段写入
  117. month = serializers.IntegerField(read_only=False, required=False, validators=[datasolve.data_validate])
  118. container = serializers.PrimaryKeyRelatedField(queryset=ContainerListModel.objects.all(),
  119. help_text='关联的主单',
  120. error_messages = {
  121. 'null': '请选择关联的主单',
  122. 'does_not_exist': '关联的主单不存在',
  123. 'incorrect_type': '关联的主单格式错误'
  124. },
  125. required=True, validators=[datasolve.data_validate])
  126. operation_type = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
  127. batch = serializers.PrimaryKeyRelatedField(queryset=BoundBatchModel.objects.all(),
  128. help_text='关联的批次',
  129. error_messages = {
  130. 'null': '请选择关联的批次',
  131. 'does_not_exist': '关联的批次不存在',
  132. 'incorrect_type': '关联的批次格式错误'
  133. },
  134. required=True, validators=[datasolve.data_validate])
  135. goods_code = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
  136. goods_desc = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
  137. goods_qty = serializers.IntegerField(read_only=False, required=True, validators=[datasolve.data_validate])
  138. goods_weight = serializers.DecimalField(read_only=False, required=True, max_digits=10, decimal_places=2, validators=[datasolve.data_validate])
  139. operator = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
  140. timestamp = serializers.DateTimeField(read_only=False, format='%Y-%m-%d %H:%M', required=True, validators=[datasolve.data_validate])
  141. from_location = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
  142. to_location = serializers.CharField(read_only=False, required=True, validators=[datasolve.data_validate])
  143. memo = serializers.CharField(read_only=False, required=False, validators=[datasolve.data_validate])
  144. class Meta:
  145. # 指定模型和排除字段
  146. model = ContainerOperationModel
  147. fields= '__all__'
  148. read_only_fields = ['id']