2016-09-20 5 views
0

Ich verwende Django REST-Framework und haben diesen Code einen PUT Aufruf zu tun:Erste JSON-Daten als QueryDict

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

und dies ist die Ansicht, die Griffe, die:

@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 ... 

Aber die request.data.get("book") ist kein boolean, sondern ein String:

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

Als ich JSON.stringify({ book: true }) in meinem Ajax c verwenden alle, es ist sogar noch schlimmer:

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

Wie kann ich das Javascript-Objekt als richtigen Python QueryDict in meinem Code zu bekommen?

Antwort

0

Wenn Sie das Feld data als BooleanField in model.py definiert haben, sollten Sie den bool -Wert von true/false in Integer 0/1 konvertieren, bevor Sie die Ajax-Anfrage senden. Hier ist der Beispielcode:

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

Eigentlich ist die BooleanField 0/1 ganze Zahl in der Datenbank gespeichert werden, anstatt wahr/falsch.

+0

Das hat nichts mit dem Modell zu tun. Es ist ein boolescher Wert, um irgendeine Art von Verhalten auszulösen. –

Verwandte Themen