#36451: Issue with GeoFeatureModelSerializer and GeneratedField returning WKT
instead of GeoJSON
-------------------------------------+-------------------------------------
     Reporter:  QyuBee               |                    Owner:  (none)
         Type:  Bug                  |                   Status:  new
    Component:  Core                 |                  Version:  5.1
  (Serialization)                    |
     Severity:  Normal               |               Resolution:
     Keywords:                       |             Triage Stage:
                                     |  Unreviewed
    Has patch:  0                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Description changed by QyuBee:

Old description:

> 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 PointField, 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,

New description:

 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,

--
-- 
Ticket URL: <https://code.djangoproject.com/ticket/36451#comment:2>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion visit 
https://groups.google.com/d/msgid/django-updates/010701975aba129d-dd203a68-4217-4403-80a8-7300caaed210-000000%40eu-central-1.amazonses.com.

Reply via email to