serializers.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #coding=utf-8
  2. from rest_framework import serializers
  3. from django.db.models import Q
  4. from apps.exceptions import CustomError
  5. from apps.serializer_errors import dump_serializer_errors
  6. from apps.warehouse.models import WarehouseStock
  7. from models import ProductBase
  8. class ProductBaseSerializer(serializers.ModelSerializer):
  9. class Meta:
  10. model = ProductBase
  11. fields = '__all__'
  12. @staticmethod
  13. def factory(user, data, id=None):
  14. if id:
  15. instance = ProductBase.getById(id)
  16. else:
  17. instance = None
  18. serializer = ProductBaseSerializer(instance, data=data)
  19. serializer.user = user
  20. return serializer
  21. def create(self, validated_data):
  22. item = ProductBase.objects.filter(type=validated_data['type'], model=validated_data['model']).first()
  23. if item:
  24. raise CustomError(u'代码为[%s]的%s已存在' % (validated_data['model'],ProductBase.getTypeText(validated_data['type'])))
  25. instance = super(ProductBaseSerializer, self).create(validated_data)
  26. WarehouseStock.createByProduct(instance)
  27. return instance
  28. def update(self, instance, validated_data):
  29. if 'type' in validated_data:
  30. if validated_data['type'] != instance.type:
  31. raise CustomError(u'禁止修改产品的类型')
  32. item = ProductBase.objects.filter(Q(type=instance.type), Q(model=validated_data['model']),~Q(id=instance.id)).first()
  33. if item:
  34. raise CustomError(u'代码为[%s]的%s已存在' % (validated_data['model'], ProductBase.getTypeText(instance.type)))
  35. instance = super(ProductBaseSerializer, self).update(instance, validated_data)
  36. return instance
  37. def validSave(self):
  38. if self.is_valid():
  39. return self.save()
  40. else:
  41. raise CustomError(dump_serializer_errors(self))