Получение выбранных полей из значения 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']