99 lines
3.7 KiB
Python
99 lines
3.7 KiB
Python
from rest_framework import serializers
|
|
from routes.models import Route, Country, City
|
|
from api.main.serializers import RouteSerializer
|
|
|
|
class SearchRouteSerializer(RouteSerializer):
|
|
id = serializers.IntegerField()
|
|
username = serializers.SerializerMethodField()
|
|
owner_type = serializers.CharField()
|
|
from_city_name = serializers.SerializerMethodField('get_start_point')
|
|
from_city_russian_name = serializers.SerializerMethodField()
|
|
from_country_name = serializers.SerializerMethodField('get_country_from')
|
|
to_city_name = serializers.SerializerMethodField('get_end_point')
|
|
to_city_russian_name = serializers.SerializerMethodField()
|
|
to_country_name = serializers.SerializerMethodField('get_country_to')
|
|
formatted_cargo_type = serializers.SerializerMethodField('get_cargo_type')
|
|
formatted_transport = serializers.SerializerMethodField('get_moving_type')
|
|
type_transport = serializers.CharField()
|
|
userImg = serializers.SerializerMethodField()
|
|
comment = serializers.CharField()
|
|
formatted_departure = serializers.DateTimeField(source='departure_DT')
|
|
formatted_arrival = serializers.DateTimeField(source='arrival_DT')
|
|
country_from_icon = serializers.SerializerMethodField()
|
|
country_to_icon = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Route
|
|
fields = (
|
|
'id', 'username', 'owner_type',
|
|
'from_city_name', 'from_city_russian_name', 'from_country_name',
|
|
'to_city_name', 'to_city_russian_name', 'to_country_name',
|
|
'formatted_cargo_type', 'formatted_transport', 'type_transport',
|
|
'userImg', 'comment', 'formatted_departure', 'formatted_arrival',
|
|
'country_from_icon', 'country_to_icon'
|
|
)
|
|
|
|
def get_username(self, obj):
|
|
return obj.owner.first_name if obj.owner else None
|
|
|
|
def get_userImg(self, obj):
|
|
try:
|
|
if obj.owner and hasattr(obj.owner, 'userprofile') and obj.owner.userprofile.image:
|
|
return obj.owner.userprofile.image.url
|
|
return None
|
|
except Exception as e:
|
|
print(f"Error in get_userImg: {e}")
|
|
return None
|
|
|
|
def get_country_from_icon(self, obj):
|
|
country = self.get_from_country_name(obj)
|
|
if not country:
|
|
return None
|
|
try:
|
|
country_obj = Country.objects.get(international_name=country)
|
|
return country_obj.flag_img_url
|
|
except Country.DoesNotExist:
|
|
return None
|
|
|
|
def get_country_to_icon(self, obj):
|
|
country = self.get_to_country_name(obj)
|
|
if not country:
|
|
return None
|
|
try:
|
|
country_obj = Country.objects.get(international_name=country)
|
|
return country_obj.flag_img_url
|
|
except Country.DoesNotExist:
|
|
return None
|
|
|
|
def get_start_point(self, obj):
|
|
return self.get_from_city_name(obj)
|
|
|
|
def get_country_from(self, obj):
|
|
return self.get_from_country_name(obj)
|
|
|
|
def get_end_point(self, obj):
|
|
return self.get_to_city_name(obj)
|
|
|
|
def get_country_to(self, obj):
|
|
return self.get_to_country_name(obj)
|
|
|
|
def get_cargo_type(self, obj):
|
|
return self.get_formatted_cargo_type(obj)
|
|
|
|
def get_moving_type(self, obj):
|
|
return self.get_formatted_transport(obj)
|
|
|
|
def get_from_city_russian_name(self, obj):
|
|
try:
|
|
city = City.objects.get(id=obj.from_city_id)
|
|
return city.russian_name or city.name
|
|
except City.DoesNotExist:
|
|
return None
|
|
|
|
def get_to_city_russian_name(self, obj):
|
|
try:
|
|
city = City.objects.get(id=obj.to_city_id)
|
|
return city.russian_name or city.name
|
|
except City.DoesNotExist:
|
|
return None
|