一个简单的问题:
我有下一个型号:
class Artist(models.Model):
name = models.CharField(...)
surname = models.CharField(...)
age = models.IntegerField(...)
clas Album(models.Model):
artist = models.ForeignKey(Artist, ...)
title = models.CharField(...)
我希望创建一个相册序列化器,
我可以使用以下序列化程序使用pk进行POST,但我不知道如何在同一序列化程序中获取艺术家信息:
class AlbumSerializer(serializers.ModelSerializer):
class Meta:
model = Album
fields = '__all__'
谢谢。
答案 0 :(得分:1)
您可以覆盖AlbumSerializer
的{{3}}:
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__'
答案 1 :(得分:0)
我相信您要查找的内容与此API Reference和StringRelatedField
相关这取决于您如何在__str__
类中配置Artist
方法。
models.py
class Artist(models.Model):
name = models.CharField(...)
surname = models.CharField(...)
age = models.IntegerField(...)
def __str__(self):
return "{name} {surname} - {age} years old".format(
name=self.name, surname=self.surname, age=self.age)
serializers.py
class AlbumSerializer(serializers.ModelSerializer):
artist = serializers.StringRelatedField(many=True)
class Meta:
model = Album
fields = ['artist, ...']
答案 2 :(得分:0)
我不确定我是否完全理解您的问题,但是如果要链接两个序列化程序,则必须执行以下操作:
class ArtistSerializer(serializers.ModelSerializer):
class Meta:
model = Artist
fields = '__all__'
class AlbumSerializer(serializers.ModelSerializer):
artist = ArtistSerializer()
class Meta:
model = Album
exclude = '__all__'
但是,如果您只想响应GET请求,则应在GET方法中包含请求对象,该方法本质上应包含Album ID,然后可以将两个模型链接在一起:
Album.objects.filter(pk=request['album_id']).first().artist
并获取与特定专辑相关的艺术家。