【问题标题】:serialize dictionary in field for a rest API end point django rest framework在字段中序列化字典以用于休息 API 端点 django 休息框架
【发布时间】:2020-08-04 08:49:22
【问题描述】:

我有一个序列化程序,我想在其中呈现一个字典,我也在将该字典转换为 JSON 格式,但我收到以下错误:

Job 类型的对象不是 JSON 可序列化的。

代码如下所示:

jobs_by_hour = serializers.SerializerMethodField()
    
 def get_jobs_by_hour(self, obj):
    jobs = Job.objects.annotate(hour=ExtractHour('dt_start'))
    res = defaultdict(lambda: [])
    for x in jobs:
        res[x.hour].append(x)
    return json.dumps(res)

我是这方面的新手,我不知道如何解决这个问题,欢迎任何帮助。最终,我想用这本字典显示按小时分组的数据,所以我得到了 24 个工作列表

【问题讨论】:

    标签: python django serialization django-rest-framework


    【解决方案1】:

    您正在附加查询集对象。您需要附加序列化数据。这样的事情应该可以工作。

     def get_jobs_by_hour(self, obj):
        jobs = Job.objects.annotate(hour=ExtractHour('dt_start'))
        res = defaultdict(lambda: [])
        for x in jobs:
            res[x.hour].append(JobSerializer(x).data)
        return json.dumps(res)
    

    在您的默认JobSerializer 中添加一个字段hour

    【讨论】:

    • 好吧,那行得通!但现在的问题是我在每个对象中都重复了这些数据,我不希望这样,我该如何解决这个问题?
    • 无法从您提供的代码中知道这一点。可能您需要提供您的视图集和序列化程序。
    • 哦,实际上没有必要,我解决了这个问题,我必须为它创建一个单独的序列化器:) 但是非常感谢,这部分答案与主要内容无关无论如何我问的问题:p
    • 是的,我确实已经发布了一些与此相关的问题:)
    猜你喜欢
    • 2021-04-03
    • 2015-02-25
    • 1970-01-01
    • 2021-11-20
    • 2015-06-30
    • 1970-01-01
    • 2013-04-08
    相关资源
    最近更新 更多