如何从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()
    以获得要显示的数据的不同行为。