如何在geojson序列化器中添加ManyToMany字段

问题描述 投票:0回答:1

将地理空间数据加载到 postgresql + postgis 数据库后,目标是将其以 geojson 格式返回到视图中。

模型.py

class Group(models.Model):
    name = models.CharField(max_length=60)

class Country(models.Model):
    name = models.CharField(max_length=60)
    groups = models.ManyToManyField(Group, related_name='groups')

views.py

def countries(request):
    queryset = Country.objects.annotate(json=AsGeoJSON('mpoly'))
    data = serializers.serialize(
        'geojson',
        queryset,
        geometry_field='mpoly',
        fields=('name', 'groups')
    )
    return HttpResponse(data)

输出的 geojson 不包含每个国家/地区的嵌套 groups。如何将它们添加到功能/属性字段中?

django gis postgis geodjango
1个回答
0
投票

可以通过聚合

ArrayAgg
 [Django-doc]:

来做到这一点
from django.contrib.postgres.aggregates import ArrayAgg


def countries(request):
    queryset = Country.objects.annotate(
        json=AsGeoJSON('mpoly'), group_names=ArrayAgg('groups__name')
    )
    data = serializers.serialize(
        'geojson',
        queryset,
        geometry_field='mpoly',
        fields=('name', 'group_names'),
    )
    return HttpResponse(data)

但是从序列化变得更加复杂的那一刻起,您可能最好使用 Django REST 框架 [drf-doc],它提供了更复杂的序列化。

© www.soinside.com 2019 - 2024. All rights reserved.