serializers.py 9.0 KB

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