我正在使用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
?
答案 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。