我正在发送multipart
POST。发送的数据的一个字段是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)}