美文网首页
Models查询 :QuerrySet格式化成json,存在外键

Models查询 :QuerrySet格式化成json,存在外键

作者: 好遠 | 来源:发表于2019-03-02 13:36 被阅读0次

    方法一:

    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的解决办法

    相关文章

      网友评论

          本文标题:Models查询 :QuerrySet格式化成json,存在外键

          本文链接:https://www.haomeiwen.com/subject/vgueuqtx.html