How to retrieve foreign key field in Django rest framework?

Viewed 13785

Given the model and serializer classes below, when I retrieve Track details, it'll only show the Track title but not the related Artist.

How would I also show the Artist name when retrieving Track details?

models.py

class Artist (models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

class Track (models.Model):    
    artist = models.ForeignKey(Artist, blank=True, null=True, on_delete=models.SET_NULL, verbose_name="Artist")
    title = models.CharField(max_length=100, verbose_name="Title")

    def __str__(self):
        return self.title

serializers.py

class ArtistSerializer(serializers.ModelSerializer):

    id = serializers.IntegerField(read_only=True)
    name = serializers.CharField()

    class Meta:
        model = Artist
        fields = ('id', 'name')

class TrackSerializer(serializers.ModelSerializer):

    class Meta:
        model = Track
        fields = '__all__'
4 Answers

In the current version of DRF you can simply do this

class TrackSerializer(serializers.ModelSerializer):
    
    artist = serializers.StringRelatedField()

    class Meta:
        model = Track
        fields = '__all__'

StringRelatedField may be used to represent the target of the relationship using its __str__ method.

REF

Related