Models查询 :QuerrySet格式化成json,存在外键、日期字段等情况

方法一:

django.core中的serializers
使用

import django.core中的serializers,
data = serializers.serialize('json',data)

缺点:对外键支持很差,无法查询到外键数据

方法二:

QuerrySet的value方法
使用:
先使用value将QuerrySet转化成ValueSet,可以指定字段(包括外键的字段)。再利用list将ValueSet转化为list,最后通过json.dumps()转化为json。

A = models.objects.all()
data  =A.value('name', 'foreignkey__name')
data = json.dumps(list(data))

缺点:

在字段含有datetime格式时,默认的处理函数无法将datetime格式化,进而报错。

解决

支持外键格式化,并且字段中含有datetime格式数据:
类似方法二,只是json.dumps()函数自定义JsonEncoder
过程:

class DateJSONEncoder(json.JSONEncoder):
    def default(self, o):
        if isinstance(o, datetime.datetime):
            return o.strftime("%Y-%m-%d %H-%M")
        if isinstance(o, datetime.date):
            return o.strftime("%Y-%m-%d")
        else:
            return json.JSONEncoder.default(self, o)

A = models.objects.all()
data  =A.value('name', 'foreignkey__name')
data = json.dumps(list(data), cls=DateJSONEncoder)

参考:
python JSONencoder
关于在Django中Json无法序列化datetime的解决办法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。