在使用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)
# 使用方式
json.dumps(data, cls=ComplexEncoder)