【发布时间】:2019-11-16 09:49:03
【问题描述】:
这是我的序列化器:
class ParentSerializer(serializers.ModelSerializer):
children = ChildSerializer(many=True) # reverse FK relation
ParentSerializer 也有一个 image 字段,所以请求必须是 multipart/form-data 以支持单个请求中的图像和数据。
以下代码/测试工作正常:
test_data = QueryDict('', mutable=True)
dictionary = {
'name': ['test'],
'children[0]': [{'key1': 'val1', 'key2': 'val2'}]
}
test_data.update(MultiValueDict(dictionary))
test_serializer = self.get_serializer(data=test_data)
test_serializer.is_valid(raise_exception=True)
test_instance = test_serializer.save()
...因为我正在手动创建children 列表。
问题是我不能通过 axios/HTML 表单做同样的事情。正在发送的数据被转换为字符串。
我有哪些选择?我想发送子对象列表以及其他数据。
DRF v3.9 & Django v2.2.
【问题讨论】:
-
添加
ChildSerializer和viewset/view,如果有错误回溯。 -
请发布您的请求。请求正文(即字段名称)很可能不适合 DRF。同时发布您遇到的任何错误。
-
我现在已经实现了一个解决方法,但我希望它可以与
field_name[0][key_one]field_name[0][key_two]field_name[1][key_one]等字段名称一起使用...... DRF/MultipartParser 能够检测到有多个field_name字段,但无法检测到数组中的键,即key_one和key_two,并抛出错误,这两个字段都是必需的(或者如果字段是可选的,但没有注册,则没有任何内容这些值)。 -
请注意,我指的是
MultipartParser,而不是JSONParser。 JSON 是直截了当的,但在multipart/form-data中,使用每个键发送的值必须 是字符串。所以我不能像{"field_name": [{"key": "value", "key2": "value"}, {"key": "value2"...}...]}那样发送JSON,因为它在请求中变成[Object Object],因为它不能解析字符串以外的任何东西。
标签: html django api django-rest-framework multipartform-data