Django序列化器嵌套关系,其中2个模型不直接相关?

问题描述 投票:0回答:1

我想获得嵌套结果,其中两个模型不是直接相关的,而是通过表间接相关的。

下面只是复制我所处的情况,而不是我正在使用的实际代码。

class ArtistSerializer(serializers.ModelSerializer):
    class Meta:
       model = Artist
       fields = ['name', 'age']

class TrackSerializer(serializers.ModelSerializer):
    artist = ArtistSerializer(read_only=True)
    class Meta:
        model = Track
        fields = ['order', 'title', 'duration', 'artist']

class ConcertSerializer(serializers.ModelSerializer):
    artist = ArtistSerializer(read_only=True)
    tracks = TrackSerializer(many=True, read_only=True)

    class Meta:
        model = Concert
        fields = ['concert_name', 'artist', 'tracks']

ArtistTrack相关。另外,ArtistConcert相关。但是我想使用tracks来获得TrackSerializer,以便在与演唱者没有直接关系的情况下获得与同一位艺术家的曲目。这可能吗?一场音乐会将有多首曲目。

django django-models orm django-rest-framework serializer
1个回答
0
投票

您有多种实现方法,考虑到您每场音乐会只有一位艺术家,您可以尝试使用SerializerMethodField

class NestedTrackSerializer(serializers.ModelSerializer):

    class Meta:
        model = Track
        fields = ['order', 'title', 'duration',]


class ConcertSerializer(serializers.ModelSerializer):
    artist = ArtistSerializer(read_only=True)
    tracks = serializer.SerializerMethodField()

    def get_tracks(self, instance):
        return NestedTrackSerializer(instance.artist.tracks.all(), many=True).data

    class Meta:
        model = Concert
        fields = ['concert_name', 'artist', 'tracks']
© www.soinside.com 2019 - 2024. All rights reserved.