Почему мой сериализатор Django возвращает только данные о совпадении и не включает соответствующие данные о результатах в ответ API?

Я работаю с фреймворком Django REST и пытаюсь создать конечную точку API, которая возвращает данные о реальном матче вместе с соответствующими оценками. У меня есть две модели, Match и Score, где Score has связан с Match с помощью внешнего ключа. Однако, когда я сериализую модель матча, ответ содержит только сведения о матче и не содержит никакой информации о счете.

Вот как выглядят мои сериализаторы:

class ScoreSerializer(serializers.ModelSerializer):
    class Meta:
        model = Score
        fields = ['id', 'run', 'wickets', 'overs']

class MatchSerializer(serializers.ModelSerializer):
    scores = ScoreSerializer(many=True, read_only=True)

    class Meta:
        model = Match
        fields = '__all__'

Вот мой код просмотра:

def livematch(request):
    live_matches = Match.objects.filter(match_mode='Live')
    serializer = MatchSerializer(live_matches, many=True)
    return Response({'success': True, 'data': serializer.data})

Связанное имя по умолчанию score_set, таким образом:

class MatchSerializer(serializers.ModelSerializer):
    score_set = ScoreSerializer(many=True, read_only=True)

    class Meta:
        model = Match
        fields = '__all__'

или вы можете использовать score_set в качестве источника:

class MatchSerializer(serializers.ModelSerializer):
    scores = ScoreSerializer(many=True, read_only=True, source='score_set')

    class Meta:
        model = Match
        fields = '__all__'

В представлении, пожалуйста, используйте .prefetch_related(..) для ускорения запроса:

def livematch(request):
    live_matches = Match.objects.filter(match_mode='Live').prefetch_related('score_set')
    serializer = MatchSerializer(live_matches, many=True)
    return Response({'success': True, 'data': serializer.data})
Вернуться на верх