2017-03-27 27 views
0

我有兩個模型,Appointment和EmployeeEvent。我需要從這些模型中獲取數據,並將結果合併到一個get api請求中。Django rest框架:將queryset轉換爲json響應

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))}) 

當我調用API,我得到的結果,但它包含了一些不必要的按鍵,如 「PK」, 「模式」 ,「字段」等。同樣在任命結果中,我需要完整的客戶對象而不是客戶ID。有什麼方法可以指定CustomerSerializer和查詢集?

結果我得到

{ 
    "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" 
     } 
    } 
    ] 
} 

預期結果

{ 
    "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

請閱讀rest框架教程,http://www.django-rest-framework.org/tutorial/quickstart/ – aliva

+0

@aliva,多好的回答! –

回答

3

你需要寫串行器所需格式來顯示數據。閱讀優秀的教程,以正確的方式引導你。但是,如果你想快速哈克的答案,然後做這樣的事情:

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

凡串行看起來是這樣的:

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...') 

編輯:更新,包括例如相關對象的