如何使用DRF发布和序列化数组以及数组?

时间:2019-01-08 18:42:03

标签: django django-rest-framework

我遇到了一个问题,即发布一个包含数组的数组的JSON对象,然后使用Django Rest Framework将其反序列化。

这里的想法是,可以有动态的玩家数量(players: 2)和玩家拥有的武器列表列表/数组(player_weapons [[], []])。

//javascript on client
var post_data = {
    players: 2,
    player_weapons: [
        ["sword", "shield"],
        ["mace", "slingshot"],
    ]};

var results = jQuery.post( url, post_data );

#serializers.py
class GameSerializer(serializers.Serializer):
    players = serializers.IntegerField(min_value=1)
    player_weapons = serializers.ListField(
        child=serializers.ListField(
            child=serializers.CharField(min_length=1, allow_blank=True),
        min_length=0, 
        required=False),
    min_length=0, 
    required=False
)

我得到的request.POST是:

<QueryDict: {'runs': ['1000'], 'additional_players': ['2'],
'player_weapons': ['sword,shield', 'mace,slingshot']}>

真正奇怪的是,当我request.POST['player_weapons']时得到:

mace,slingshot

我希望/希望得到:

[['sword', 'shield'], ['mace', 'slingshot']]

任何有关如何构造POST并在DRF中处理它的帮助都将很棒。

1 个答案:

答案 0 :(得分:0)

感谢RishiG的帮助。

问题是我没有在请求中指定contentType。我对它稍加修改以使用jQuery的ajax请求:

    var posting = jQuery.ajax({
        url: url,
        type: "POST",
        data: JSON.stringify(post_data),
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function(){
        }
    });