2015-11-07 31 views
1

我使用Django作爲服務器端和角度作爲客戶端。從Django獲取自定義的休息數據

我想從我的django rest api後端獲取數據。 我看到很多關於從已經存在的模塊中獲取數據的教程。但是如果我想要檢索由多個模塊組合的數據呢?

例如,我有兩個模塊Reservations and Clubs。我想要檢索包含來自這兩個模塊的數據的json對象,以獲取特定的俱樂部ID。

模塊 -

class Club(models.Model): 
    name = models.CharField(max_length=1024) 
    image_path = models.CharField(max_length=1024) 

class Reservation(models.Model): 
    club = models.ForeignKey('Club') 
    user = models.CharField(max_length=1024) 
    is_paid = models.BooleanField(default=False) 

串行器 -

class ReservationSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Reservation 
     fields = ('club', 'user') 

class ClubSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Club 
     fields = ('id', 'name', 'surfaces') 

查看套 -

class ReservationViewSet(generics.ListAPIView): 
    serializer_class = ReservationSerializer 
    queryset = Reservation.objects.all() 
    filter_backends = (filters.DjangoFilterBackend,) 
    filter_fields = ('id', 'club') 

class ClubViewSet(generics.ListAPIView): 
    queryset = Club.objects.all() 
    serializer_class = ClubSerializer 
    filter_backends = (filters.DjangoFilterBackend,) 
    filter_fields = ('id', 'name') 

所以,對於這個〔實施例,我想,當我得到這個網址 -
http://127.0.0.1:8000/api/initial_data?club=2
它會運行一個視圖集,做一些邏輯,然後返回這個格式的JSON -

{club_id: 2, reservations: {1:"John", 2:"Doe", 3:"Bob"} } 

而且更一般地說 - 如何從多個模塊返回自己的自定義JSON包含數據,與給定的URL參數(回到客戶端)?

編輯 - 如果我想返回一個簡單的JSON,考慮到每個視圖映射到模型/序列化程序的事實,我應該如何使用django DRF來完成它?
也許使用簡單的JsonResponse ..?

回答

1

您可以在另一個

class ReservationSerializer(serializers.ModelSerializer): 
    ... 

class ClubSerializer(serializers.ModelSerializer): 
    reservations = ReservationSerializer(many=True, read_only=True) 
    ... 

現在ClubSerializer定義一個串行的區域將返回各自俱樂部

+1

調用[嵌套關係(http://www.django-rest-framework.org/api-guide/relations/#nested-relationships) – k4yaman

+0

@Serjik感謝您的快速回復。但是我想從這個方法中返回一個更復雜的json,這只是一個例子。我想返回來自多個modlues組合的數據 – Sahar

+0

@John nop,享受幫助 – Serjik

0

預留空間可以使用APIView和覆蓋get方法。

def get(self, request) 

club = request.query_params.get('club', None) 

""" 
Do anything, access data, prepare dictionary or list with result 
""" 

return Response(result_dictionary_or_list) 
相關問題