美文网首页
model_to_dict转QuerySert字典时,丢失Dat

model_to_dict转QuerySert字典时,丢失Dat

作者: 烤奶要加冰 | 来源:发表于2023-02-28 16:36 被阅读0次

在使用model_to_dict进行序列化时,可能存在DateTimeField、DateField字段值丢失情况

原因

在DateTimeField、DateField类型字段设置auto_now_add=True和auto_now=True属性时,会默认添加editable=False隐藏属性

image.png

解决方式

方法一

在进行序列化之后,追加日期字段的值

testDict = model_to_dict(testObject)
testDict['date'] = testInfo.date

方法二

使用json.dumps进行序列化,并自定义序列化规则

  class ComplexEncoder(json.JSONEncoder):
    """
    含有 datetime 对象数据转 json 时,时间格式会报错
    """

    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(obj, date):
            return obj.strftime('%Y-%m-%d')
        elif isinstance(obj, Model):
            return model_to_dict(obj)
        elif isinstance(obj, QuerySet):
            return list(obj)
        elif isinstance(obj, object):
            return obj.__dict__
        else:
            return json.JSONEncoder.default(self, obj)

相关文章