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__'