2016-09-20 182 views
0

我使用Django的REST框架,并有这样的代码做一个PUT电话:获取JSON数据的QueryDict

$.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']}> 

当我在阿贾克斯C使用JSON.stringify({ book: true })首先,它更是雪上加霜:

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

我怎样才能得到JavaScript对象为在我的代码正确的Python QueryDict

回答

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。

+0

这与模型无关。这是触发某种行为的布尔值。 –