如何在django rest framework serializer中获取父对象

use*_*546 11 django django-rest-framework

我有这个模型

class Track(models.Model):
    album = models.ForeignKey(Album)
Run Code Online (Sandbox Code Playgroud)

现在我TrackSerializer想要获得专辑的名称.

class TrackSerializer(serializers.ModelSerializer):

    class Meta:
        model = Track
        fields = ('album__name')
Run Code Online (Sandbox Code Playgroud)

它不起作用

我不想为此声明AlbumSerializer.有没有任何方法可以做到这一点,而无需转发新的序列化程序

Kev*_*own 15

您可以在您的创建领域做到这一点TrackSerializer的是具有自定义source检索的专辑名称.

将用于填充字段的属性的名称.可能是一个只接受自身参数的方法,例如URLField('get_absolute_url'),或者可以使用点符号来遍历属性,例如EmailField(source ='user.email').

因此,在您的情况下,您的字段需要添加(album_name在本例中)自定义source

class TrackSerializer(serializers.ModelSerializer):
    album_name = serializers.CharField(read_only=True, source="album.name")

    class Meta:
        model = Track
        fields = ('album_name", )
Run Code Online (Sandbox Code Playgroud)

这将包括键下输出中的专辑名称album_name.


小智 5

要包括父关系,您只需要包括其序列化器并将其包括在字段列表中。

Class TrackSerializer(ModelSerializer):
    album = AlbumSerializer()

    class Meta:
         model = Track
         fields = ('name', 'year', 'album',)
Run Code Online (Sandbox Code Playgroud)