remove geometry from serialized data using filter parameter

This commit is contained in:
Laura Klünder 2023-11-23 18:41:46 +01:00
parent 3fd5c49926
commit fc53e3197d
6 changed files with 35 additions and 17 deletions

View file

@ -78,13 +78,15 @@ class GeometryMixin(SerializableMixin):
@cached_property
def point(self):
if "geometry" in self.get_deferred_fields():
raise ValueError
return good_representative_point(self.geometry)
def _serialize(self, geometry=True, simple_geometry=False, **kwargs):
result = super()._serialize(simple_geometry=simple_geometry, **kwargs)
if geometry and "geometry" not in self.get_deferred_fields():
result['geometry'] = format_geojson(smart_mapping(self.geometry), rounded=False)
if simple_geometry:
if simple_geometry and "geometry" not in self.get_deferred_fields():
result['point'] = (self.level_id, ) + tuple(round(i, 2) for i in self.point.coords[0])
if not isinstance(self.geometry, Point):
self.geometry: BaseGeometry
@ -99,6 +101,8 @@ class GeometryMixin(SerializableMixin):
return result
def get_geometry(self, detailed_geometry=True):
if "geometry" in self.get_deferred_fields():
return None
if detailed_geometry:
return format_geojson(smart_mapping(self.geometry), rounded=False)
return format_geojson(smart_mapping(box(*self.geometry.bounds)), rounded=False)

View file

@ -133,6 +133,8 @@ class Space(LevelGeometryMixin, SpecificLocation, models.Model):
@property
def grid_square(self):
if "geometry" in self.get_deferred_fields():
return None
return grid.get_squares_for_bounds(self.geometry.bounds) or ''
def details_display(self, editor_url=True, **kwargs):

View file

@ -137,6 +137,8 @@ class Area(SpaceGeometryMixin, SpecificLocation, models.Model):
@property
def grid_square(self):
if "geometry" in self.get_deferred_fields():
return None
return grid.get_squares_for_bounds(self.geometry.bounds) or ''
def details_display(self, editor_url=True, **kwargs):
@ -265,6 +267,8 @@ class POI(SpaceGeometryMixin, SpecificLocation, models.Model):
@property
def grid_square(self):
if "geometry" in self.get_deferred_fields():
return None
return grid.get_square_for_point(self.x, self.y) or ''
@property