Ошибка ключа в сериализаторе 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)
Вернуться на верх