我正在做自动完成输入。
我正在尝试创建一个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')
答案 0 :(得分:4)
问题几乎就是例外。 GeopositionField是一种复杂类型,它没有任何标准的序列化方式到JSON。您必须将其拆分为单独的坐标,例如将其转换为模型中的字典。
像这样:
class Dispositivo(models.Model):
...
def position_dict(self):
return {'lat': self.position.latitude, 'lon': self.position.longitude}
然后在您要转储的数据中,写{... 'position': n.position_dict(), ...}
以使用字典表示而不是复杂字段。
答案 1 :(得分:1)
我只是通过在将序列化程序放在GeopositionField上时将CharField放在其中来解决此问题
放在serializers.py上:
position = serializers.CharField(max_length=100)