【问题标题】:Django Rest Framework many related field - Javascript ajax - corret format for list of intsDjango Rest Framework 许多相关领域 - Javascript ajax - 整数列表的正确格式
【发布时间】:2014-07-20 09:58:55
【问题描述】:

我有一个使用 DRF 的序列化程序类:

class ItemSerializer(serializers.ModelSerializer):
    categories = serializers.PrimaryKeyRelatedField(many=True)

我想通过 ajax 请求使用此序列化程序通过 RetrieveUpdateDestroyAPIView 更新模型实例的 categories

var categories = [1,2,3];
$.ajax({
    url : "/api/items/id",
    type: 'POST',
    headers: {
        'X-HTTP-Method-Override': 'PUT'
    },      
    // Form data
    data : {
      'categories':categories
    }
});

不幸的是,我无法理解如何格式化 categories 参数。 我试过如上代码所示,参数没有传给序列化器,序列化器属性中categories字段为空。 在这种情况下,请求参数是一个列表,但名称是categories[] 而不是categories

我也尝试过JSON.stringify(categories),但在这种情况下,序列化程序不会验证错误:{"categories": ["Incorrect type. Expected pk value, received unicode."]} 我发现在这种情况下,请求参数值是一个字符串而不是一个列表。

另一方面,我可以通过 DRF 可浏览 api 执行 PUT 请求,在这种情况下,参数名为 categories,它的值是一个列表。

您知道我应该如何使用 ajax 发送参数,即发送参数,以便在请求参数中以列表形式存在,名称为 categories

非常感谢!

【问题讨论】:

    标签: javascript ajax django django-rest-framework


    【解决方案1】:

    所以我在这个问题中找到了答案:

    How to send a list of int with jQuery to ASP.net MVC Default Model Binder

    解决方法是在ajax调用中使用traditional=true选项

    var categories = [1,2,3];
    $.ajax({
        url : "/api/items/id",
        type: 'POST',
        traditional:true,
        headers: {
            'X-HTTP-Method-Override': 'PUT'
        },      
        // Form data
        data : {
          'categories':categories
        }
    

    然后参数以列表的形式正确传输。 });

    【讨论】:

      猜你喜欢
      • 2015-03-24
      • 2015-10-14
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多