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): class Meta: model = ObjektSigurnosti fields = '__all__' def create(self, validated_data): lokacija_data = validated_data.pop('lokacija', None) 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("Nevaljani 'lon' i '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 def update(self, instance, validated_data): lokacija_data = validated_data.get('lokacija', None) if lokacija_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) instance.lokacija = lokacija instance.save() return instance raise ValidationError("Nevaljani 'lon' i 'lat' vrijednosti za 'lokacija'.") return super().update(instance, validated_data)