64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
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)
|
|
|
|
|
|
|