serializers.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. # coding=utf-8
  2. import datetime
  3. from django.utils import timezone
  4. from django.conf import settings
  5. from rest_framework import serializers
  6. from .models import UsedVehicle, UsedVehicleImg
  7. class UsedVehicleSerializer(serializers.ModelSerializer):
  8. status_text = serializers.CharField(source='get_status_display', read_only=True)
  9. brand_name = serializers.CharField(source='brand.name', read_only=True)
  10. gearbox_name = serializers.CharField(source='gearbox.name', read_only=True)
  11. color_name = serializers.CharField(source='color.name', read_only=True)
  12. displacement_name = serializers.CharField(source='displacement.name', read_only=True)
  13. emission_name = serializers.CharField(source='emission.name', read_only=True)
  14. seat_count_name = serializers.CharField(source='seat_count.name', read_only=True)
  15. oil_type_name = serializers.CharField(source='emission.name', read_only=True)
  16. plate_date = serializers.DateField(format='%Y-%m-%d')
  17. factory_date = serializers.DateField(format='%Y-%m-%d')
  18. thumbnail_url = serializers.SerializerMethodField()
  19. def get_thumbnail_url(self, obj):
  20. if obj.thumbnail:
  21. return '%s%s' % (settings.MEDIA_URL, obj.thumbnail.picture)
  22. return ''
  23. class Meta:
  24. model = UsedVehicle
  25. fields = '__all__'
  26. def create(self, validated_data):
  27. instance = super(UsedVehicleSerializer, self).create(validated_data)
  28. factory_date = self.context['request'].data.get('factory_date')
  29. if factory_date:
  30. years = int((timezone.now() - datetime.datetime.strptime(factory_date, '%Y-%m-%d')).days / 365)
  31. instance.years = years
  32. instance.save()
  33. return instance
  34. def update(self, instance, validated_data):
  35. instance = super(UsedVehicleSerializer, self).update(instance, validated_data)
  36. return instance
  37. class UsedVehicleImgSerializer(serializers.ModelSerializer):
  38. img_url = serializers.SerializerMethodField()
  39. def get_img_url(self, obj):
  40. if obj.img:
  41. return '%s%s' % (settings.MEDIA_URL, obj.img.picture)
  42. return ''
  43. class Meta:
  44. model = UsedVehicleImg
  45. fields = '__all__'