2017-03-27 7 views
0

Ich habe zwei Modelle, Termin und EmployeeEvent. Ich brauche Daten von diesen Modellen und kombiniere das Ergebnis zu einer einzigen get-API-Anfrage.Django Rest Framework: Konvertieren von Abfrage in JSON Antwort

urls.py

url(r'^calenderevents', calender_events) 

views.py

@api_view(['GET']) 
def calender_events(request): 
    queryset1 = Appointment.objects.all() 
    queryset2 = EmployeeEvent.objects.all() 
    return Response({'Appointments':json.loads(serializers.serialize('json', queryset1)), 'EmployeeEvents': json.loads(serializers.serialize('json', queryset2))}) 

Wenn ich die API aufrufen, erhalte ich das Ergebnis, aber es enthält einige unerwünschte Tasten wie "pk", "Modell" "Felder" usw. Auch im Ergebnis der Ernennungen benötige ich statt der Kundennummer das vollständige Kundenobjekt. Gibt es eine Möglichkeit, den CustomerSerializer zusammen mit dem Abfragesatz anzugeben?

Ergebnisse am

bekommen
{ 
    "Appointments": [ 
    { 
     "pk": "33a0fffb-326e-4566-bfb4-b146a87a4f3f", 
     "model": "appointment.appointment", 
     "fields": { 
     "customer": "25503315-8bac-4070-87c1-86bf0630c846", 
     "status": "Requested", 
     "description": "Assigned appointment", 
     } 
    }, 
    { 
     "pk": "9da806f5-77f1-41e6-a745-7be3f79d6f7a", 
     "model": "appointment.appointment", 
     "fields": { 
     "customer": "25503315-8bac-4070-87c1-86bf0630c846", 
     "status": "Requested", 
     "description": "Assigned appointment", 
     } 
    } 
    ], 
    "EmployeeEvents": [ 
    { 
     "pk": "f76b5de0-1ab8-4ac3-947d-15ba8941d97d", 
     "model": "employee_event.employeeevent", 
     "fields": { 
     "event_name": "New Event", 

     "start_date": "2017-02-17", 
     "end_date": "2017-02-22" 
     } 
    }, 
    { 
     "pk": "56f02290-370e-426c-951e-a93c57fde681", 
     "model": "employee_event.employeeevent", 
     "fields": { 
     "event_name": "New Event", 
     "start_date": "2017-02-02", 
     "end_date": "2017-03-22" 
     } 
    } 
    ] 
} 

Erwartetes Ergebnis

{ 
    "Appointments": [ 
    { 
     "id": "33a0fffb-326e-4566-bfb4-b146a87a4f3f", 
     "customer": { 
     "id": "25503315-8bac-4070-87c1-86bf0630c846", 
     "firstname": "Customre 1", 
     "photo_url": "imagepath", 
     }, 
     "status": "Requested", 
     "description": "Assigned appointment" 
    }, 
    { 
     "id": "9da806f5-77f1-41e6-a745-7be3f79d6f7a", 
     "customer": { 
     "id": "15ba8941d97d-8bac-4070-87c1-86bf0630c846", 
     "firstname": "Customre 2", 
     "photo_url": "imagepath", 
     }, 
     "status": "Requested", 
     "description": "Assigned appointment" 
    }, 
    } 
    ], 
    "EmployeeEvents": [ 
    { 
     "id": "f76b5de0-1ab8-4ac3-947d-15ba8941d97d", 
     "event_name": "New Event 1", 
     "start_date": "2017-02-17", 
     "end_date": "2017-02-22" 
    }, 
    { 
     "id": "56f02290-370e-426c-951e-a93c57fde681", 
     "event_name": "New Event 2”, 
     "start_date": "2017-02-17", 
     "end_date": "2017-02-22" 
    } 
    ] 
} 
+0

Bitte lesen Sie Rest Framework Tutorial, http://www.django-rest-framework.org/tutorial/quickstart/ – aliva

+0

@aliva, was für eine tolle Antwort !!! –

Antwort

3

Sie benötigen einen Serializer zu schreiben, um die Daten im gewünschten Format angezeigt werden soll. Lesen Sie das hervorragende Tutorial, um es richtig zu führen. Aber wenn Sie eine schnelle Hacky Antwort wollen, dann tun Sie etwas wie folgt aus:

serializer = AppointmentSerializer(Appointment.objects.all(), many=True) 
return Response(serializer.data) 

Wo der Serializer etwa wie folgt aussieht:

class AppointmentSerializer(serializers.ModelSerializer): 
    customer = CustomerSerializer(required=False, allow_null=True) 

    class Meta: 
     model = Appointment 
     fields = ('id', 'customer', 'status', 'etc...') 
     related_object = 'customer' 

class CustomerSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Customer 
     fields = ('id', 'first_name', 'etc...') 

Edit: aktualisiert Beispiel eines verwandten Objekts schließen

Verwandte Themen