如何从Django REST框架序列化程序中删除嵌套?
在我的如何从Django REST框架序列化程序中删除嵌套?,django,django-rest-framework,Django,Django Rest Framework,在我的models.py文件中定义了两个模型: class Album(models.Model): album = models.CharField(max_length=100) band = models.CharField(max_length=100) class Song(models.Model): album = models.ForeignKey(Album, on_delete=models.CASCADE) song = models.Ch
models.py
文件中定义了两个模型:
class Album(models.Model):
album = models.CharField(max_length=100)
band = models.CharField(max_length=100)
class Song(models.Model):
album = models.ForeignKey(Album, on_delete=models.CASCADE)
song = models.CharField(max_length=100)
对于这些,我在我的serializers.py
文件中将序列化程序定义为:
class AlbumSerializer(serializers.ModelSerializer):
class Meta:
model = Album
fields = "__all__"
class SongSerializer(serializers.ModelSerializer):
album = AlbumSerializer()
class Meta:
model = Song
fields = "__all__"
当我提出请求时,我得到的数据是以下格式:
[
{
"id": 1,
"album": {
"id": 1,
"album": "Hybrid Theory",
"band": "Linkin Park"
},
"song": "Numb"
},
{
"id": 2,
"album": {
"id": 1,
"album": "Hybrid Theory",
"band": "Linkin Park"
},
"song": "In the End"
}
]
如何从唱片集名称和歌曲序列化程序中删除嵌套?我想要这样的数据:
[
{
"id": 1,
"album_id": 1,
"album": "Hybrid Theory",
"band": "Linkin Park"
"song": "Numb"
},
{
"id": 2,
"album_id": 1,
"album": "Hybrid Theory",
"band": "Linkin Park"
"song": "In the End"
}
]
试试这个:
class SongSerializer(serializers.ModelSerializer):
album_id = serializers.SerializerMethodField(source='album.id')
album = serializers.SerializerMethodField(source='album.album')
band = serializers.SerializerMethodField(source='album.band')
class Meta:
model = Song
fields = ['album_id', 'album', 'band', .....]
歌曲序列化程序
覆盖到\u表示
从django.forms导入模型到dict
def到_表示(自身、实例):
song=super().到_表示(实例)
album=model_to_dict(instance.album)
对于键,值在album.items()中:
setattr(歌曲、键、值)
回音
我没有测试代码。您可以覆盖
到_representation()
以获得要显示的数据的不同行为。