Ajax Django restframework:如何清除/清空与FormData的多个关系
我正在通过Django rest框架编辑Django用户实例,它运行良好,包括设置/更改组成员资格。 但我无法从所有组中清除/清空该用户 这对我来说在使用httpie的shell上很有效:Ajax Django restframework:如何清除/清空与FormData的多个关系,ajax,django,django-rest-framework,Ajax,Django,Django Rest Framework,我正在通过Django rest框架编辑Django用户实例,它运行良好,包括设置/更改组成员资格。 但我无法从所有组中清除/清空该用户 这对我来说在使用httpie的shell上很有效: http -j PATCH :8000/api/accounts/user/1/ groups:='[]' 这是我在浏览器中尝试的内容: var data = new FormData(); data.append('groups', JSON.stringify([])); // not workin
http -j PATCH :8000/api/accounts/user/1/ groups:='[]'
这是我在浏览器中尝试的内容:
var data = new FormData();
data.append('groups', JSON.stringify([])); // not working
$.ajax({
dataType: 'json',
url: '/api/accounts/user/1/',
type: 'PATCH',
processData: false,
contentType: false,
data: data
});
表单数据如下所示:
------WebKitFormBoundaryJu7QPC8AcBTpWEKJ
Content-Disposition: form-data; name="groups"
[]
答复是:
{"groups": ["Incorrect type. Expected pk value, received unicode."]}
我想问题在于FormData不能像httpie那样传输原始JSON。 restframework以不同的方式对待它们:
def field_from_native(self, data, files, field_name, into):
...
if self.many:
try:
# Form data
value = data.getlist(field_name)
if value == [''] or value == []:
raise KeyError
except AttributeError:
# Non-form data
value = data[field_name]
这个自定义方法使它工作,但我仍然不喜欢这种方法。要清除,请在FormData中附加null:
data.append('groups', null);
并在后端将其设置为空列表:
class FormDataPrimaryKeyRelatedField(serializers.PrimaryKeyRelatedField):
"""
Custom PrimaryKeyRelatedField which allows clearing via form-data using
JS's 'null' as to clearing value.
"""
def field_from_native(self, data, files, field_name, into):
data = dict(data)
if self.many:
if data.get(field_name) == [u'null']:
data[field_name] = []
super(FormDataPrimaryKeyRelatedField, self).field_from_native(data, files, field_name, into)
class UserSerializer(serializers.ModelSerializer):
groups = FormDataPrimaryKeyRelatedField(many=True, source='groups', required=False)