I rest_framework.response Methode verwenden Objekte mehrerer django Modelle zu senden. Die Antwort enthält jedoch Backslashes mit Anführungszeichen. Hier ist meine Ansicht:Json serialisierten Daten mit umgekehrten Schrägstrichen
@api_view()
def myfunctions(request,id):
responseData = {}
userObject = TifUser.objects.filter(id=id)
attendances = Attendance.objects.filter(User=userObject)
leaves = Leave.objects.filter(User=userObject)
odds = ODD.objects.filter(User=userObject)
printjobs = PrintJob.objects.filter(User=userObject)
issues = Issue.objects.filter(User=userObject)
#serialize into json
userObject = serializers.serialize("json", userObject)
attendances = serializers.serialize("json",attendances)
leaves = serializers.serialize("json",leaves)
odds = serializers.serialize("json",odds)
printjobs = serializers.serialize("json",printjobs)
issues = serializers.serialize("json",issues)
#set responseData dictionary values
responseData['user'] = userObject
responseData['attendances'] = attendances
responseData['leaves'] = leaves
responseData['odds'] = odds
responseData['printjobs'] = printjobs
responseData['issues'] = issues
#responseData['attendances'] = userObject
return response.Response(responseData)
Die json Antwort erhalte ich ist:
{"attendances":"[{\"model\": \"mainApp.attendance\", \"pk\": 5, \"fields\": {\"ArrivalTime\": \"2016-06-27T18:45:46.355Z\", \"DepartureTime\": null, \"User\": 4, \"ArrivalImei\": \"1\", \"DepartureImei\": null, \"Hash\": \"321f059c-4230-417a-adff-f0035097c85d\"}}, {\"model\": \"mainApp.attendance\", \"pk\": 13, \"fields\": {\"ArrivalTime\": \"2016-07-18T15:40:39.943Z\", \"DepartureTime\": null, \"User\": 4, \"ArrivalImei\": \"2\", \"DepartureImei\": null, \"Hash\": \"e61fad3e-8238-46fc-b09b-8b7754d43f3b\"}}]","printjobs":"[{\"model\": \"mainApp.printjob\", \"pk\": 1, \"fields\": {\"User\": 4, \"DateAdded\": \"2016-07-18\", \"Status\": \"disapproved\", \"Person\": 5, \"Level\": \"boss\", \"Client\": \"someone\", \"HandledBy\": \"tester\", \"SanctionedBy\": \"myself\", \"AdvancePayment\": 0, \"FinalPayment\": 1000, \"PaymentNumber\": 1, \"Remarks\": \"something\"}}]","odds":"[]","user":"[{\"model\": \"mainApp.tifuser\", \"pk\": 4, \"fields\": {\"AuthUser\": 7, \"Head\": null, \"Boss\": null, \"ClrLevel\": 1, \"Department\": 1, \"DesignationName\": 1, \"Name\": \"tester\", \"IsRegistered\": true, \"DateOfBirth\": \"1222-11-11\", \"Anniversary\": \"2001-12-22\", \"Mobile\": \"2134567890\", \"gcmDevice\": null, \"FatherName\": \"\", \"MotherName\": \"\", \"PersonalEmail\": \"\", \"Gender\": \"Male\", \"CurrentAddress\": \"\", \"PermanentAddress\": \"\", \"PANNumber\": \"\", \"AadharCardNumber\": null, \"BloodGroup\": \"\", \"MaritalStatus\": \"Married\", \"ProfilePhoto\": \"\", \"Imei\": \"\"}}]","leaves":"[]","issues":"[]"}
Gibt es eine andere Möglichkeit, es zu tun? Was ich verstehe, ist, dass es die Daten zweimal codiert (einmal in serializers.serialize und dann in response.Response). Aber ich will das nicht. Ich möchte verschachtelte Objekte. Etwas wie dieses:
{"attendances":[{"model": "mainApp.attendance", "pk": 5, "fields": {"ArrivalTime": "2016-06-27T18:45:46.355Z", "DepartureTime": null, "User": 4, "ArrivalImei": "1",...
Kann mir jemand sagen, wie man das erreicht? Danke im Voraus.
Wenn Sie 'print' Ihre Json Antwort werden die Schrägstriche weg? –
@ShangWang Ja, beim Drucken gibt es keine umgekehrten Schrägstriche. Nur in der Antwort bekomme ich sie. –
Dann erhalten Sie JSON-Zeichenfolge, die die Anführungszeichen entkommt. Können Sie 'result = json.loads (json_response)' und sehen, ob 'result' eine Datenstruktur ist, die Sie wollen? –