首页 > 解决方案 > 将 PointFeild 转换为 JSON 对象

问题描述

有什么方法可以将 GeoDjango 的 POINTFEILD 序列化为 JSON?

我有以下型号

class Company(models.Model):
    name = models.CharField(max_length=200, default='Company', null=True)

    def __unicode__(self):
        return self.name


class Shop(models.Model):
    name = models.CharField(max_length=200, default="bla")
    address = models.CharField(max_length=300, default='blabla')
    location = models.PointField(null=True, blank=True, geography=True)
    company = models.ForeignKey(
        Company, on_delete=models.CASCADE, null=True)

和以下序列化程序

class ShopSerializer(serializers.ModelSerializer):

    distance = serializers.DecimalField(
        source='distance.km', max_digits=10, decimal_places=2, required=False, read_only=True)

    # serialize('geojson', Shop.objects.all(),
    #           geometry_field='location', fields=('name', 'address'))

    class Meta:
        model = Shop
        fields = ['id', 'name', 'address', 'location', 'distance']
class CompanySerializer(serializers.ModelSerializer):
    shop_set = ShopSerializer(many=True)

    class Meta:
        model = Company
        fields = ['id', 'name', 'shop_set']

    def create(self, validated_data):
        shop_validated_data = validated_data.pop('shop_set')
        company = Company.objects.create(**validated_data)
        shop_set_serializer = self.fields['shop_set']
        for each in shop_validated_data:
            each['company'] = company
        shops = shop_set_serializer.create(shop_validated_data)
        return company

使用 GeoJson 我可以得到如下响应

[
    {
        "id": 1,
        "name": "Cosmetica",
        "address": "somwhere",
        "location": {
            "type": "Point",
            "coordinates": [
                24.896,
                67.182
            ]
        }
    },

但这里的点场已经转换成一个数组。但我需要它是具有 2 个键值对的 Json 对象

location:{lat,long}

谁能帮忙

标签: jsongeojsongeodjango

解决方案



推荐阅读