2

我正在做一个自动完成输入。

我正在尝试创建一个 json 响应。在我的模型中,我有这个:

   position = GeopositionField(default=DEFAULT)

当我尝试创建 json 响应给我这个错误:

   TypeError: Geoposition(40,2) is not JSON serializable

我该如何解决这个问题?

编辑1:

views.py

data =[{'label': n.nombre, 'nombre': n.nombre, 'posicion': n.position, 'status': n.estado} for n in
               Dispositivo.objects.filter(nombre__icontains=what)]

return HttpResponse(json.dumps(data), mimetype='application/json')
4

2 回答 2

4

问题几乎就是异常所说的。GeopositionField 是一种复杂类型,它没有任何标准的序列化为 JSON 的方式。您必须将其拆分为单独的坐标,例如通过将其转换为模型中的字典。

像这样:

class Dispositivo(models.Model):
    ...

    def position_dict(self):
        return {'lat': self.position.latitude, 'lon': self.position.longitude}

然后在您转储的数据中,写入{... 'position': n.position_dict(), ...}使用字典表示而不是复杂字段。

于 2013-11-11T19:16:48.690 回答
1

我只是通过在 GeopositionField 上的序列化程序中放置 CharField 来解决这个问题

在 serializers.py 上放这个:

position = serializers.CharField(max_length=100)
于 2018-09-16T19:14:15.243 回答