@@ -98,9 +98,25 @@ def get_condition(self, obj):
9898
9999
100100class SubletDataSerializer (ModelSerializer ):
101+ latitude = SerializerMethodField ()
102+ longitude = SerializerMethodField ()
103+
101104 class Meta :
102105 model = Sublet
103- fields = ["street_address" , "beds" , "baths" , "start_date" , "end_date" ]
106+ fields = ["street_address" , "beds" , "baths" , "start_date" , "end_date" , "latitude" , "longitude" ]
107+
108+ def get_latitude (self , obj ):
109+ if obj .true_latitude and obj .true_longitude :
110+ fake_lat , _ = obj ._calculate_fake_location (obj .true_latitude , obj .true_longitude )
111+ return float (fake_lat ) if fake_lat else None
112+ return None
113+
114+ def get_longitude (self , obj ):
115+ if obj .true_latitude and obj .true_longitude :
116+ _ , fake_lon = obj ._calculate_fake_location (obj .true_latitude , obj .true_longitude )
117+ return float (fake_lon ) if fake_lon else None
118+ return None
119+
104120
105121
106122# Unified serializer for all listing types (Items and Sublets); used for CRUD operations
@@ -255,14 +271,25 @@ def _create_item(self, validated_data, additional_data):
255271 return item
256272
257273 def _create_sublet (self , validated_data , additional_data ):
274+ from decimal import Decimal , ROUND_DOWN
258275 tags = validated_data .pop ("tags" , None )
259276
277+ latitude = additional_data .get ("latitude" )
278+ longitude = additional_data .get ("longitude" )
279+
280+ if latitude is not None :
281+ latitude = Decimal (str (latitude )).quantize (Decimal ("1.000000" ), rounding = ROUND_DOWN )
282+ if longitude is not None :
283+ longitude = Decimal (str (longitude )).quantize (Decimal ("1.000000" ), rounding = ROUND_DOWN )
284+
260285 sublet = Sublet .objects .create (
261286 street_address = additional_data .get ("street_address" ),
262287 beds = additional_data .get ("beds" ),
263288 baths = additional_data .get ("baths" ),
264289 start_date = additional_data .get ("start_date" ),
265290 end_date = additional_data .get ("end_date" ),
291+ true_latitude = latitude ,
292+ true_longitude = longitude ,
266293 ** validated_data ,
267294 )
268295
@@ -319,6 +346,10 @@ def _update_sublet(self, instance, additional_data):
319346 for field in sublet_fields :
320347 if field in additional_data :
321348 setattr (sublet , field , additional_data [field ])
349+ if "latitude" in additional_data :
350+ sublet .true_latitude = additional_data ["latitude" ]
351+ if "longitude" in additional_data :
352+ sublet .true_longitude = additional_data ["longitude" ]
322353 sublet .full_clean ()
323354 sublet .save ()
324355
0 commit comments