当成为multipart的一部分时,如何在Django中序列化字符串geojson



我正在发送multipartPOST。发送的数据的一个字段是footprint,它是字符串geojson。我将它转换为字符串,因为它不能作为dict对象发送,不像以json的形式POST发送。

self.thumbnail = open('apps/data/thumb.png','rb')
self.footprint = """{"type": "Polygon", "coordinates": [[[121.79168701171875, 16.909683615558635], [122.12539672851561, 16.909683615558635], [122.12539672851561, 17.19983423466054], [121.79168701171875, 17.19983423466054], [121.79168701171875, 16.909683615558635]]]}"""
self.data = {
'thumbnail': self.thumbnail,
'footprint': self.footprint,
}
self.client.post('/data_management/capture_group_products/',
data=self.data,
format='multipart')

我使用Django中的字段序列化程序来提取geojson并输入到GeometryField。

class FootprintSerializer(serializers.Field):
def to_internal_value(self, data):
geom_data = data
#geom_data = json.dumps(geom_data)
print(geom_data, type(geom_data))
return GEOSGeometry(geom_data)
#footprint = FootprintSerializer(source='*')

当我把它输入到GEOSGeometry时,当数据是字符串时,我得到错误:ValueError: too many values to unpack (expected 2)

{"type": "Polygon", "coordinates": [[[121.79168701171875, 16.909683615558635], [122.12539672851561, 16.909683615558635], [122.12539672851561, 17.19983423466054], [121.79168701171875, 17.19983423466054], [121.79168701171875, 16.909683615558635]]]} <class 'str'>

但当我使用json.dumps(geom_data)时,我也会从geojson中得到反斜杠,并得到错误:ValueError: String input unrecognized as WKT EWKT, and HEXEWKB.

后台geojson:

"{"type": "Polygon", "coordinates": [[[121.79168701171875, 16.909683615558635], [122.12539672851561, 16.909683615558635], [122.12539672851561, 17.19983423466054], [121.79168701171875, 17.19983423466054], [121.79168701171875, 16.909683615558635]]]}" <class 'str'>

我也试过:geom_data = json.dumps(json.loads(geom_data)),也没用。犯了和第一个一样的错误。

返回的对象必须指向字段。

class FootprintSerializer(serializers.Field):
def to_internal_value(self, data):
return {"footprint": GEOSGeometry(data)}

最新更新