django-rest ModelSerializer 选择要在嵌套关系中显示的字段

Moh*_* hp 3 django django-rest-framework

我将参考 django-rest-framework API 示例来解决这个问题。假设我们有两个定义如下的序列化器。

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

class AlbumSerializer(serializers.ModelSerializer):
    tracks = TrackSerializer(many=True, read_only=True)

    class Meta:
        model = Album
        fields = ['album_name', 'artist', 'tracks']
Run Code Online (Sandbox Code Playgroud)

现在,如果我执行 GET 请求并检索一个Album实例,它将返回一个响应,其中包含实例列表Track,其中每个实例包含 Track 的所有字段。有没有办法只返回模型中选定的字段子集Track?例如,仅将titleduration字段返回给客户端,而不返回 'order' 字段。

Wil*_*sem 6

TrackSerializer您可以为您的制定具体的Album,例如:

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

class TrackForAlbumSerializer(serializers.ModelSerializer):
    class Meta:
        model = Track
        fields = ['title', 'duration']

class AlbumSerializer(serializers.ModelSerializer):
    tracks = TrackForAlbumSerializer(many=True, read_only=True)

    class Meta:
        model = Album
        fields = ['album_name', 'artist', 'tracks']
Run Code Online (Sandbox Code Playgroud)

您不必为每个模型定义一个序列化器,您可以定义多个序列化器,每个序列化器都用于专门的任务。