介于jQuery和Django之间,我的JSON数据得到额外的[],表单验证失败

时间:2012-11-28 18:14:29

标签: jquery ajax django post

我有一个名为ManyToMany的{​​{1}}字段的Django模型,以及该模型的简单images

我正在尝试使用jQuery和非常基本的ModelForm发布数据。

模型的字段

UpdateView

表格

images = models.ManyToManyField(
    RawImage,
    null = True,
)

UpdateView

class PublicDataPoolForm(forms.ModelForm):
    error_css_class = 'error'

    class Meta:
        model = PublicDataPool

发布数据的jQuery

class PublicDataPoolAddDataView(AjaxableResponseMixin, UpdateView):
    model = PublicDataPool
    form_class = PublicDataPool_ImagesForm

    @method_decorator(user_passes_test(lambda u: user_has_active_subscription(u)))
    def dispatch(self, *args, **kwargs):
        return super(PublicDataPoolAddDataView, self).dispatch(*args, **kwargs)

我得到$.ajax({ type: 'post', dataType: 'json', url: '/rawdata/publicdatapools/' + pk + '/add-data/', data: {images: [1, 2]} }); 因为字段ValidationError是必需的。如果我在images打印request.POST,我就会知道:

UpdateView

我认为问题出在那些<QueryDict: {u'images[]': [u'1', u'2']}> 上,因为我已经检查了另一种以更传统的方式发布的表单,[]没有那些request.POST在字段名称中。

知道我缺少什么吗?

1 个答案:

答案 0 :(得分:2)

您需要在页面加载时设置jQuery.ajaxSettings.traditional = true;,以便jquery不会将[]附加到密钥。

来源: http://forum.jquery.com/topic/jquery-post-1-4-1-is-appending-to-vars-when-posting-from-array-within-array#14737000000691277