Opened 3 months ago
Closed 3 months ago
#36451 closed Bug (invalid)
Issue with GeoFeatureModelSerializer and GeneratedField returning WKT instead of GeoJSON
Reported by: | QyuBee | Owned by: | |
---|---|---|---|
Component: | Core (Serialization) | Version: | 5.1 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Hi team,
I'm currently using GeoFeatureModelSerializer (from rest_framework_gis) to serialize a model that includes a GeneratedField representing a geographic Point. However, instead of returning a GeoJSON geometry object, the serializer returns a WKT string like this:
{ "id": 483602, "type": "Feature", "geometry": "SRID=4326;POINT (-3.826841 48.576644)", "properties": { "id_data": "29019_5010_00013", "libelle": "13 rue Traverse, 29200 Brest" } },
Here’s a simplified version of my setup:
point_geo = models.GeneratedField( output_field=models.PointField(blank=True, null=True), db_persist=True, expression=Func(F('lon'), F('lat'), function='ST_MakePoint', output_field=PointField(srid=4326)), blank=True, null=True )
This point_geographique field is computed based on available coordinates (lon, lat or x, y) and works fine at the DB level. However, since it's a GeneratedField, it seems like GeoFeatureModelSerializer does not recognize it as a proper geometry field and falls back to a generic model field, which results in the WKT string in the output.
In serializer, if i print the fields, it returns :
'point_geo': ModelField(allow_null=True, model_field=<django.db.models.fields.generated.GeneratedField: point_geo>, read_only=True)
As a workaround, I’ve overridden field in serializer with GeometryField, but it feels like something that should be handled natively if the output field is a PointField.
Is there any plan to support GeneratedField-based geometry fields in future versions of DRF-GIS? Or is there a cleaner approach that I might be missing?
Thanks in advance for your help!
Best regards,
Change History (3)
comment:1 by , 3 months ago
Description: | modified (diff) |
---|
comment:2 by , 3 months ago
Description: | modified (diff) |
---|
comment:3 by , 3 months ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
This sounds like an issue with either djangorestframework's support for
GeneratedField
inModelSerializer
or the more specific GIS functionality provided by djangorestframework-gis (in itsready()
method), not an issue in Django.Taking a look at
ModelSerializer.serializer_field_mapping
in DRF, I don't see any fathoming ofGeneratedField
, so it's probably a missing feature. You could probably easily subclass that (as well as GeneratedField, e.g. GeneratedGeometryField) to get what you want. Hope that helps!