Django REST框架使用外键序列化模型

Django REST框架使用外键序列化模型,django,django-rest-framework,Django,Django Rest Framework,简单问题: 我有以下型号: class Artist(models.Model): name = models.CharField(...) surname = models.CharField(...) age = models.IntegerField(...) clas Album(models.Model): artist = models.ForeignKey(Artist, ...) title = models.CharField(...)

简单问题:

我有以下型号:

class Artist(models.Model):
    name = models.CharField(...)
    surname = models.CharField(...)
    age = models.IntegerField(...)

clas Album(models.Model):
    artist = models.ForeignKey(Artist, ...)
    title = models.CharField(...)
我希望创建一个相册序列化程序:

在GET上显示艺术家信息 可以使用帖子上的pk链接艺术家 我可以使用以下序列化程序使用pk发布文章,但我不知道如何在同一个序列化程序中获取艺术家信息:

class AlbumSerializer(serializers.ModelSerializer):
    class Meta:
        model = Album
        fields = '__all__'

谢谢。

我相信您所寻找的与此相关,与

这取决于如何在Artister类中配置_ustr__uuu方法

models.py

类Artistmodels。模型: name=models.CharField。。。 姓氏=模型。查菲尔德。。。 年龄=模型。整型字段。。。 定义自身: 返回{name}{姓氏}-{age}years old.format name=self.name,姓氏=self.姓氏,年龄=self.age 序列化程序.py

类AlbumSerializers.ModelSerializer: 艺术家=序列化程序。StringRelatedFieldmany=True 类元: 型号=相册 字段=['艺术家,…']
我不确定我是否完全理解您的问题,但如果您想链接两个序列化程序,则必须执行以下操作:

class ArtistSerializer(serializers.ModelSerializer):
    class Meta:
        model = Artist
        fields = '__all__'


class AlbumSerializer(serializers.ModelSerializer):
    artist = ArtistSerializer()
    class Meta:
        model = Album
        exclude = '__all__'
但是,如果您只想响应GET请求,那么GET方法中应该有request对象,该对象基本上应该包含唱片集id,然后您可以将两个模型链接在一起:

Album.objects.filter(pk=request['album_id']).first().artist
并获取与特定相册关联的艺术家。

您可以覆盖相册序列化程序的:


当您获得相册对象时,您应该能够执行以下操作:album.artist并获得您的艺术家对象
class AlbumSerializer(serializers.ModelSerializer):

    def to_representation(self, obj):
        data = super().to_representation(obj)
        data['artist'] = ArtistSerializer(obj.artist).data
        return data

    class Meta:
        model = Album
        fields = '__all__'