首页 > 解决方案 > 如何 JSON 序列化包含文件的对象?

问题描述

我想从我的 DRF 后端检索Story相关联的信息。包含数据和文件,并以列表形式出现。这意味着单个可以有多个对象(是 FK in )。story_mediaStory_MediaStoryStory_MediaStorystory_media

但是,当我想返回Story_Media对象列表时,它们似乎不可序列化。所以我的问题是,我如何 JSON 序列化包含文件的对象?

TypeError:Story_Media 类型的对象不是 JSON 可序列化的

class StoryRetrieveSerializer (serializers.ModelSerializer):
    story_media = serializers.SerializerMethodField('get_story_media')

    class Meta:
        model = Story
        fields =  ('title', 'story_media')

    def get_story_media(self, story):
        return Story_Media.objects.filter(story=story.id)

标签: djangodjango-rest-framework

解决方案


您需要创建一个序列化程序Story_Media,将查询集的对象传递many=True并返回序列化程序数据

例如:

def get_story_media(self, story):
        qs = Story_Media.objects.filter(story=story.id)
        serializer = StoryMediaSerializer(qs, many=True)
        return serializer.data

推荐阅读