【问题标题】:django-rest-framework-gis related fielddjango-rest-framework-gis 相关领域
【发布时间】:2024-11-25 23:05:01
【问题描述】:

我有一个地理模型结构,其中多个事件可以具有相同的位置:

class Event(models.Model):
    name = models.CharField(max_length=128, blank=True, null=True)
    location = models.ForeignKey('MarketLocation', null=True, blank=True)

class EventLocation(models.Model):
    location = models.PointField(srid=4326)

我正在使用 django-rest-framework-gis 提供的 GeoFeatureModelSerializer 输出单个 JSON 对象,但 PointField 被呈现为字符串而不是坐标对:

所以它给了我:

"location": "POINT (-1.909 53.7094)"

代替:

  "point": {
        "type": "Point",
        "coordinates": [-123.0208, 44.0464],
   },

合乎逻辑的答案是在序列化程序中定义字段:

geo_field = eventlocation__location

但这似乎对输出没有任何影响,这让我认为它可能不起作用,但它可能应该起作用。有人做过这项工作吗?如果有,怎么做?

【问题讨论】:

    标签: python django django-rest-framework geodjango django-rest-framework-gis


    【解决方案1】:

    我正在做类似的事情,但使用 MultiPolygon 而不是 Point。这是我的序列化程序:

    class AreaSerializer(gis_serializers.GeoFeatureModelSerializer):
    
        class Meta:
            model = Area
            geo_field = "geom"
    

    或许不需要在geo_field中引用模型,直接说明字段?

    这是我的 Serializer 的 repo,如果有帮助的话:

    https://github.com/kelvinn/alerted-us-web/blob/master/apps/alertdb/serializers.py

    【讨论】:

    • 啊 - 我看到你在评论中回答了你自己的问题。 :)
    【解决方案2】:

    我今天早上发现了这个,它也适用于 DRF-gis:

    Django Rest Framework - Get related model field in serializer

    我在 EventLocation 上创建了一个序列化程序,并将其定义为 EventSerializer 中的“位置”,并且该点作为 geojson 几何图形输出。

    【讨论】: