Как вернуть пользовательский вывод JSON в Django REST Framework - PullRequest
2 голосов
/ 05 ноября 2019

Я пытаюсь вернуть пользовательский JSON со следующей структурой

[ { 
'yesterday': [{'teams': "team a -team b", 'start_time': "0: 11", 'pick': "X2", 'score': "1:4", 'odds': 1.25, 'won_or_lost': "won", 'date': "2019-01-8"}],

'today': [{'teams': "team a -team b", 'start_time': "0: 11", 'pick': "X2", 'score': "1:4", 'odds': 1.25, 'won_or_lost': "won", 'date': "2019-01-8"}],

'tomorrow': [{'teams': "team a -team b", 'start_time': "0: 11", 'pick': "X2", 'score': "1:4", 'odds': 1.25, 'won_or_lost': "won", 'date': "2019-01-8"}]
}]

Ниже приведен мой код:

serializer.py

class GamesSerializer(serializers.Serializer):
    class Meta:
        model = AllGames
        fields = ('teams', 'start_time', 'pick',
                  'score', 'odds', 'won_or_lost', 'date')


class GamesViewSet(viewsets.ModelViewSet):
    today_date = date_picker

    yesterday = AllGames.objects.filter(
        date=today_date(-1)).order_by('start_time', 'teams')
    today = AllGames.objects.filter(
        date=today_date(0)).order_by('start_time', 'teams')
    tomorrow = AllGames.objects.filter(
        date=today_date(1)).order_by('start_time', 'teams')

    queryset = [yesterday, today, tomorrow]
    serializer_class = GamesSerializer

Токовый выход

[
    {},
    {},
    {}
]

Как мне изменить мой GamesSerializer , чтобы он возвращал пользовательский вывод, как показано выше.

Ответы [ 2 ]

2 голосов
/ 05 ноября 2019

Вы можете преобразовать свой класс ответа из DRF ModelViewSet в ViewSet. Затем вы можете еще раз проанализировать ваши данные перед возвратом ответа, переопределив retrieve

Как упоминалось здесь: https://www.django -rest-framework.org / api-guide / viewsets / # example

0 голосов
/ 06 ноября 2019

Для тех, кто пытается найти ответ на этот вопрос, я использовал Viewset вместо ModelViewSet, как предложено @ jay-vasant , а затем overrode list методом выше, чтобы настроить вывод так, как я хотел. Это мой GamesViewSet после обновления.

class GamesViewSet(viewsets.ViewSet):
def list(self, request):
    today_date = date_picker

    yesterday = AllGames.objects.filter(
        date=today_date(-1)).order_by('start_time', 'teams')
    today = AllGames.objects.filter(
        date=today_date(0)).order_by('start_time', 'teams')
    tomorrow = AllGames.objects.filter(
        date=today_date(1)).order_by('start_time', 'teams')

    queryset = [yesterday, today, tomorrow]
    games = []
    for day in queryset:
        serializer = GamesSerializer(day, many=True)
        games.append(serializer.data)
    return Response(games)

Вывод, который я получаю после.

[
    [{'teams': "team a -team b", 'start_time': "0: 11", 'pick': "X2", 'score': "1:4", 'odds': 1.25, 'won_or_lost': "won", 'date': "2019-01-8"}],

    [{'teams': "team a -team b", 'start_time': "0: 11", 'pick': "X2", 'score': "1:4", 'odds': 1.25, 'won_or_lost': "won", 'date': "2019-01-8"}],
    [{'teams': "team a -team b", 'start_time': "0: 11", 'pick': "X2",'score': "1:4", 'odds': 1.25, 'won_or_lost': "won", 'date': "2019-01-8"}]
 ]

Что сейчас близко к тому, что я хотел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...