将JSON数据作为QueryDict获取

时间:2016-09-20 09:29:06

标签: jquery django django-rest-framework

我正在使用Django REST Framework并使用此代码进行PUT调用:

$.ajax({
    url: '/api/v1/order/'+orderid+'/',
    type: 'PUT',
    data: { book: true }
});

这是处理该问题的视图:

@api_view(['PUT', 'POST'])
@authentication_classes((SessionAuthentication, TokenAuthentication, BasicAuthentication))
@permission_classes((IsAuthenticated,))
def api_orderbook(request, orderid):
    logger.debug(request.data)
    if request.method == 'PUT' and request.data.get("book") == True:
         ... do stuff ...

但是,request.data.get("book")不是布尔值,而是字符串:

<QueryDict: {u'book': [u'true']}>

当我在Ajax调用中使用JSON.stringify({ book: true })时,情况更糟:

<QueryDict: {u'{"book":true}': [u'']}>

如何在我的代码中将Javascript对象作为正确的Python QueryDict

1 个答案:

答案 0 :(得分:0)

如果您已在model.py中将data字段定义为BooleanField,则应在发送ajax请求之前将bool值从true / false转换为整数0/1。以下是示例代码:

$.ajax({
    url: '/api/v1/order/'+orderid+'/',
    type: 'PUT',
    data: { book: 1 } // 1 stands for true in BooleanField
});

实际上,BooleanField将在数据库中存储0/1整数而不是true / false。