Saya akan merujuk contoh API Django-rest-framework pada ini. Katakanlah kita memiliki dua serializer yang didefinisikan seperti di bawah ini.

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']

Sekarang jika saya melakukan permintaan GET dan mengambil instance Album, itu akan memberi saya respons dengan daftar instance Track di dalamnya di mana setiap instance berisi semua bidang Track. Apakah ada cara untuk mengembalikan hanya subset bidang yang dipilih dalam model Track? Misalnya hanya mengembalikan bidang title dan duration ke klien tetapi bukan bidang 'pesanan'.

1
Mohammad hp 14 Agustus 2019, 10:43

1 menjawab

Jawaban Terbaik

Anda dapat membuat TrackSerializer spesifik untuk Album Anda, seperti:

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']

Anda tidak harus menentukan satu serializer per model, Anda dapat menentukan beberapa serializer yang masing-masing Anda gunakan untuk tugas khusus.

2
Willem Van Onsem 14 Agustus 2019, 07:46