Изменить список результатов API django -rest-framework - PullRequest
0 голосов
/ 14 июля 2020

Я использую django -rest-framework для создания остатка API для моей модели, на моей модели я сохраняю диапазон дат (начало и конец), но в списке для API мне нужна одна запись по дате .

#serializers.py
class ShceduleSerializer(FlexFieldsModelSerializer):

    class Meta:
        model = Shcedule
        fields = ['id', 'start', 'end', 'user']


#viewsets.py
class ShceduleViewSet(FlexFieldsModelViewSet):

    queryset = Shcedule.objects.all()
    serializer_class = ShceduleSerializer

Теперь у меня что-то вроде этого:

"results": [
        {
            "id": 1,
            "start": "2020-05-25",
            "end": "2020-05-29",
            "user": 50
        },

Но мне нужна одна запись по дате

"results": [
            {
                "id": 1,
                "date": "2020-05-25",
                "user": 50
            },
            {
                "id": 1,
                "date": "2020-05-26",
                "user": 50
            },
            {
                "id": 1,
                "date": "2020-05-27",
                "user": 50
            },
            {
                "id": 1,
                "date": "2020-05-28",
                "user": 50
            },
            {
                "id": 1,
                "date": "2020-05-29",
                "user": 50
            },

1 Ответ

1 голос
/ 14 июля 2020

Вы можете переопределить метод list(), чтобы изменить ответ в соответствии с вашими потребностями. Например:

class ShceduleViewSet(FlexFieldsModelViewSet):

    queryset = Shcedule.objects.all()
    serializer_class = ShceduleSerializer

    def list(self, request, *args, **kwargs):
        schedule_results = super().list(request=request).data
        day_delta = datetime.timedelta(days=1)

        for schedule in schedule_results['results']:
            start_date = schedule['start']
            end_date = schedule['end']
            
            schedule_objects = {'results': []}
            for i in range((end_date - start_date).days):
                schedule_objects['results'].append({
                   "id": schedule['id'],
                   "date": start_date + i*day_delta,
                   "user": schedule['user']
                })
     
            output = schedule_objects

            return Response(output, status=status.HTTP_200_OK)
...