Почему мой сериализатор 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})