diff --git a/plovidba_aplikacija/__pycache__/serializers.cpython-38.pyc b/plovidba_aplikacija/__pycache__/serializers.cpython-38.pyc index 0bd93e7..fe28572 100644 Binary files a/plovidba_aplikacija/__pycache__/serializers.cpython-38.pyc and b/plovidba_aplikacija/__pycache__/serializers.cpython-38.pyc differ diff --git a/plovidba_aplikacija/serializers.py b/plovidba_aplikacija/serializers.py index 3aac045..b5824bf 100644 --- a/plovidba_aplikacija/serializers.py +++ b/plovidba_aplikacija/serializers.py @@ -1,6 +1,8 @@ from rest_framework import serializers from django.contrib.gis.geos import Point from .models import ObjektSigurnosti +import json +from rest_framework.exceptions import ValidationError class ObjektSigurnostiSerializer(serializers.ModelSerializer): @@ -10,16 +12,26 @@ class ObjektSigurnostiSerializer(serializers.ModelSerializer): def create(self, validated_data): lokacija_data = validated_data.pop('lokacija', None) - lokacija = Point(lokacija_data['lon'], lokacija_data['lat'], srid=3765) - objekt = ObjektSigurnosti.objects.create(lokacija=lokacija, **validated_data) - return objekt - def to_representation(self, instance): - return {'lon': instance.lokacija.x, 'lat': instance.lokacija.y} - - def update(self, instance, validated_data): - lokacija_data = validated_data.pop('lokacija', None) - lokacija = Point(lokacija_data['lon'], lokacija_data['lat'], srid=3765) if lokacija_data else None - instance.lokacija = lokacija - instance.save() - return super().update(instance, validated_data) + try: + lokacija_data = json.loads(lokacija_data) + except (json.JSONDecodeError, TypeError): + raise ValidationError("Nevaljan format za 'lokacija'. Mora biti JSON.") + + if isinstance(lokacija_data, dict): + lon = lokacija_data.get('lon') + lat = lokacija_data.get('lat') + + if lon is not None and lat is not None: + lokacija = Point(lon, lat, srid=3765) + objekt = ObjektSigurnosti.objects.create(lokacija=lokacija, **validated_data) + return objekt + + raise ValidationError("Invalid 'lon' or 'lat' vrijednosti za 'lokacija'.") + + + def to_representation(self, instance): #u sklopu ovog definiran i update + representation = super().to_representation(instance) #da se prikažu sva polja + representation['lon'] = instance.lokacija.x + representation['lat'] = instance.lokacija.y + return representation