Ошибка ключа в сериализаторе drf
У меня есть сериализатор следующего вида :
class LocationSerializer(serializers.Serializer):
lat = serializers.DecimalField(max_digits=9, decimal_places=6),
lng = serializers.DecimalField(max_digits=9, decimal_places=6),
term = serializers.CharField(max_length=100)
в файле views.py :
@api_view(['POST'])
def get_prefer_locations(request):
serilizer = LocationSerializer(data=request.data)
if serilizer.is_valid():
print(request.data)
location_obj=Location(serilizer.data['lat'],serilizer.data['lng'],serilizer.data['term'])
address = location_obj.convert_latandlong_to_address()
а это класс Location, который я определил :
class Location:
def __init__(self, latitude,longitude,term):
self.lat = latitude,
self.lng=longitude,
self.term=term
def convert_latandlong_to_address(self):
geolocator = Nominatim(user_agent="geoapiExercises")
location = geolocator.reverse(self.lat+","+self.lng)
address = location.raw['address']
return address
Когда я распечатал request.data в терминале, я получил следующее :
{'lat': '29.623411959216355', 'lng': '52.49860312690429', 'term': 'cafe'}
но я получил эту ошибку :
File "/home/admin1/mizbanproject/location/preferlocation/api/views.py", line 15, in get_prefer_locations
location_obj = Location(serilizer.data['lat'],serilizer.data['lng'],serilizer.data['term'])
KeyError: 'lat'
и вот json, который я отправляю через postman:
{
"lat":"29.623411959216355",
"lng":"52.49860312690429",
"term":"cafe"
}
Поскольку вы проверяете свой сериализатор, проверенные данные должны быть доступны в validated_data
:
location_obj=Location(serilizer.validated_data['lat'],serilizer.validated_data['lng'],serilizer.validated_data['term'])
Я изменил серилизаторы на следующие и он работает, проблема была в max_digits и decimal_places :
class LocationSerializer(serializers.Serializer):
lat = serializers.DecimalField(max_digits=25,decimal_places=15)
lng = serializers.DecimalField(max_digits=25, decimal_places=15)
term = serializers.CharField(max_length=100)