По умолчанию, когда вы вызываете запрос GET в представлении ModelViewSet
, он вызывает метод list
.Внутри метода списка Rest Framework действительно использует Model
для создания набора запросов для запроса данных, а затем передает его в Serializer
для сериализации данных, а затем возвращает их, поэтому вы получили следующее:
[
{
"id": 588,
"title": "title",
.. : ..
},
{
"id": 590,
"title": "title2",
.. : ..
},
]
Таким образом, чтобы получить ответ, который вы ожидаете, вы должны переопределить этот list
метод, чтобы получить ответ с форматом, который вы ожидаете, например так:
from datetime import date
from rest_framework import status
class StudyPageViewSet(viewsets.ModelViewSet):
"""
Study create, read, update, delete over API.
"""
model = Study
serializer_class = StudyPageSerializer
permission_classes = (IsAuthenticated, IsAuthorPermission,)
def get_queryset(self):
return Study.on_site.all()
def list(self, request):
queryset = self.get_queryset()
today = date.today()
output = [{
"list_before_today": self.get_serializer(queryset.filter(date__lt=today), many=True).data
}, {
"list_after_today": self.get_serializer(queryset.filter(date__gt=today), many=True).data
}]
return Response(output, status=status.HTTP_200_OK)
Это просто идея, поэтому у вас естьчтобы соответствовать вашему коду, чтобы он работал.Я также не рекомендую вам делать это, потому что ModelViewSet
четко определен Django Rest Framework, если вы хотите получить этот ответ, вы также можете создать другой APIView для обработки этого.
Надеюсь, что это поможет!