serializers.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. from scanapp.models import *
  2. from scanapp.utils import get_language
  3. from rest_framework import serializers
  4. from django.urls import reverse
  5. class UserSerializer(serializers.ModelSerializer):
  6. _token = serializers.ReadOnlyField()
  7. password = serializers.CharField(write_only=True)
  8. class Meta:
  9. model = User
  10. fields = ('user_id', '_token', 'password')
  11. class UserActivitySerializer(serializers.ModelSerializer):
  12. class Meta:
  13. model = UserActivity
  14. fields = ('id', 'user_id', 'activity')
  15. class ProductTypeSerializer(serializers.ModelSerializer):
  16. title = serializers.ReadOnlyField()
  17. class Meta:
  18. model = ProductType
  19. fields = ('id','is_packaging_material', 'title', 'name', 'deleted', 'product_set')
  20. def get_url(self, obj):
  21. request = self.context['request']
  22. return reverse('download-image', kwargs={'image_id': obj.id, image_folder: 'product_type_icon'}, request=request)
  23. class ProductPictureSerializer(serializers.ModelSerializer):
  24. url = serializers.SerializerMethodField()
  25. image = serializers.FileField(write_only=True)
  26. class Meta:
  27. model = ProductPicture
  28. fields = ('id', 'url', 'name', 'image', 'product')
  29. def get_url(self, obj):
  30. request = self.context['request']
  31. return reverse('download_product_picture', kwargs={'pk': obj.id})
  32. class ProductPictureLinkField(serializers.ModelSerializer):
  33. url = serializers.SerializerMethodField()
  34. class Meta:
  35. model = ProductPicture
  36. fields = ('url',)
  37. def to_representation(self, value):
  38. return self.get_url(value)
  39. def get_url(self, obj):
  40. request = self.context['request']
  41. return reverse('download_product_picture', kwargs={'pk': obj.id})
  42. class ProductWriteSerializer(serializers.ModelSerializer):
  43. class Meta:
  44. model = Product
  45. fields = '__all__'
  46. write_only_fields = ('weight',)
  47. read_only_fields = ('user',)
  48. def to_internal_value(self, data):
  49. return super(ProductWriteSerializer, self).to_internal_value(data)
  50. class ProductSerializer(serializers.ModelSerializer):
  51. user = serializers.PrimaryKeyRelatedField(read_only=True)
  52. weight = serializers.SerializerMethodField()
  53. length = serializers.SerializerMethodField()
  54. width = serializers.SerializerMethodField()
  55. height = serializers.SerializerMethodField()
  56. icon_link = serializers.SerializerMethodField()
  57. pictures = ProductPictureLinkField(many=True, read_only=True)
  58. class Meta:
  59. model = Product
  60. fields = '__all__'
  61. write_only_fields = ('weight',)
  62. read_only_fields = ('icon_link',)
  63. def get_weight(self, obj):
  64. language = get_language(self.context['request'])
  65. return str(language.weight_unit.convert_to(obj.weight)) + language.weight_unit.name
  66. def get_length(self, obj):
  67. language = get_language(self.context['request'])
  68. return str(language.length_unit.convert_to(obj.length)) + language.length_unit.name
  69. def get_width(self, obj):
  70. language = get_language(self.context['request'])
  71. return str(language.length_unit.convert_to(obj.width)) + language.length_unit.name
  72. def get_height(self, obj):
  73. language = get_language(self.context['request'])
  74. return str(language.length_unit.convert_to(obj.height)) + language.length_unit.name
  75. def get_icon_link(self, obj):
  76. icon = None
  77. try:
  78. icon = obj.pictures.all()[0]
  79. except:
  80. icon = ProductPicture.objects.get(pk=1)
  81. return reverse('download_product_picture', kwargs={'pk': icon.id})
  82. class EAN_CodeSerializer(serializers.ModelSerializer):
  83. user = serializers.PrimaryKeyRelatedField(read_only=True)
  84. products = ProductSerializer(many=True, read_only=True)
  85. class Meta:
  86. model = EAN_Code
  87. fields = ('id', 'user', 'barcode', 'deleted', 'products')
  88. class ProductTypeHierSerializer(serializers.ModelSerializer):
  89. class Meta:
  90. model = ProductTypeHier
  91. fields = '__all__'
  92. class BOMSerializer(serializers.ModelSerializer):
  93. user = serializers.PrimaryKeyRelatedField(read_only=True)
  94. class Meta:
  95. model = BOM
  96. fields = ('product', 'product_type', 'weight')
  97. class ProductTypeHierMainSerializer(serializers.ModelSerializer):
  98. children = serializers.SerializerMethodField(read_only=True)
  99. name = serializers.SerializerMethodField(read_only=True)
  100. label = serializers.SerializerMethodField()
  101. title = serializers.ReadOnlyField()
  102. class Meta:
  103. model = ProductType
  104. fields = ('children','name', 'title', 'label', 'id')
  105. def get_label(self, obj):
  106. language = get_language(self.context['request'])
  107. return obj.get_with_locale(language).title
  108. def get_name(self, obj):
  109. return obj.name
  110. def get_children(self, obj):
  111. product_type_hiers = ProductTypeHier.objects.filter(parent=obj)
  112. product_children = []
  113. [product_children.append(temp.child) for temp in product_type_hiers]
  114. product_types = ProductTypeHierMainSerializer(product_children, many=True, context=self.context)
  115. return product_types.data