当您通过多部分/表单数据发送这样的数组时
request.data
QueryDict
python在内部使用的是将所有发布的数据表示为字符串,这导致了失败。
在您的情况下,您使用axios发送的数据会像这样进入python
QueryDict({
"photo": ["file"],
"services": ['2,3,1'],
"name": ["tet"],
"location": ["123"],
"phone": ["232323"],
})
我们需要修改它,使它看起来像这样
QueryDict({
"photo": ["file"],
"services": [2, 3, 1],
"name": ["tet"],
"location": ["123"],
"phone": ["232323"],
})
您可以覆盖序列化程序或视图集创建方法来实现此
def create(self, request, *args, **kwargs):
# override create method when posting as multipart/form-data
# services are sent as a string from the frontend
# so we need to convert it to a list
services = request.data.get("services", None)
if services and isinstance(services, str):
request.data._mutable = True # make QueryDict mutable to perform updates
parsed_services = services.split(",") # services are of form ["1,5,9"] now
services = [int(s) for s in parsed_services]
request.data.setlist("services", services) # set as a list in the request
request.data._mutable = False # make the QueryDict immutable again
return super().create(request, *args, **kwargs)
裁判: