2015-08-03 3 views
2

Django Restframework предоставляет общие представления для списков и отдельных моделей из запросов. Какой класс представления будет наиболее подходящим для создания конечной точки, которая будет служить статистическим резюме набора запросов?Django Restframework: какое представление использовать для статистического резюме запроса?

Я мог бы с уверенностью построить APIView с нуля, но хотел бы повторно использовать большинство параметров в ListAPIView (например, get_queryset, permission_classes и т. Д.), А также параметры URL.

конечные точки будут организованы следующим образом:

/api/data/   # data endpoint 
/api/data/summary/ # summary endpoint 

Резюме конечных точек обеспечит единый объект, не относящийся к одному экземпляру модели.

Благодарим вас за советы по наилучшей практике.

+0

Я думаю создать свой собственный класс APIView это лучший способ сделать это. – Brobin

ответ

0

Сейчас я придумал следующее решение:

# pseudo-code !  

class DataView(ListAPIView): 
    """Returns a queryset as a serialized and paginated list. 
    Set queryset, permissions, etc. here.""" 

    def get_queryset(self): 
     # add complex lookup here 
     queryset = self.queryset 
     return queryset 


class SummaryView(DataView): 
    """Overwrite the get method to serve different 
    content, e.g. statistical summary.""" 

    def summarize(self, request, *args, **kwargs): 
     """This can be moved to a Mixin class.""" 
     # make sure the filters of the parent class get applied 
     queryset = self.filter_queryset(self.get_queryset()) 
     # do statistics here, e.g. 
     stats = {'count': queryset.count()} 
     # not using a serializer here since it is already a 
     # form of serialization 
     return Response(stats) 

    def get(self, request, *args, **kwargs): 
     return self.summarize(request, *args, **kwargs) 
+0

Я сделал то же самое, что вы предлагаете. Просто создайте ответ самостоятельно. Нет необходимости в сериализаторе. Это усложнит код – xleon

Смежные вопросы