Получение выбранных полей из значения Foreign Key с помощью сериализаторов django-rest-framework. (Как получить некоторые поля ForeignKey).

Мой класс модели для исполнителя, альбома и трека.

 
    class Artist(models.Model):
        first_name = models.CharField(max_length=100)
        last_name = models.CharField(max_length=100)
        email = models.EmailField()
    
    
    class Album(models.Model):
        album_name = models.CharField(max_length=100)
        artist = models.ForeignKey(Artist, related_name='albums', on_delete=models.CASCADE)
    
    
    class Track(models.Model):
        album = models.ForeignKey(Album, related_name='tracks', on_delete=models.CASCADE)
        title = models.CharField(max_length=100)
        duration = models.IntegerField()

Мой сериализатор для соответствующих моделей.

    class ArtistSerializer(serializers.ModelSerializer):
        class Meta:
            model = Artist
            fields = '__all__'
    
    
    class TrackSerializer(serializers.ModelSerializer):
    
        class Meta:
            model = Track
            fields = ['title', 'duration']
    
   
    class AlbumSerializer(serializers.ModelSerializer):
        tracks = TrackSerializer(many=True, read_only=True)
    
        class Meta:
            model = Album
            fields = '__all__'
            depth = 1

Для получения, Выходной сигнал такой

    {'id': 1, 
     'tracks': [{'title': 'Public Service Announcement', 'duration': 245}, 
                 {'title': 'What More Can I Say', 'duration': 264}], 
     'album_name': 'The Grey Album', 
      'artist': {'id': 1, 'first_name': 'lala', 'last_name': 
                'nakara','email':'lalanakara@yahoo.com'}
     }
    

Мой желаемый результат: Я хочу избавиться от поля email. Я просмотрел документацию Django-rest-framework, но не смог найти ничего, связанного с выбором поля из внешних ключей

    {'id': 1, 
     'tracks': [{'title': 'Public Service Announcement', 'duration': 245}, 
                 {'title': 'What More Can I Say', 'duration': 264}], 
     'album_name': 'The Grey Album', 
      'artist': {'id': 1, 'first_name': 'lala', 'last_name': 
                'nakara'}
     }

Создайте нового художника serillizer и исключите поле email.

    class ArtistWithNoEmailSerializer(serializers.ModelSerializer):
        class Meta:
            model = Artist
            exclude = ['email']


    class AlbumSerializer(serializers.ModelSerializer):
        tracks = TrackSerializer(many=True, read_only=True)
        artist = ArtistWithNoEmailSerializer()
        class Meta:
            model = Album
            fields = ['id', 'tracks', 'artist', 'album_name']


Вернуться на верх