在使用model_to_dict
進(jìn)行序列化時(shí),可能存在DateTimeField咬荷、DateField字段值丟失情況
原因
在DateTimeField冠句、DateField類型字段設(shè)置auto_now_add=True和auto_now=True屬性時(shí),會(huì)默認(rèn)添加editable=False隱藏屬性
image.png
解決方式
方法一
在進(jìn)行序列化之后幸乒,追加日期字段的值
testDict = model_to_dict(testObject)
testDict['date'] = testInfo.date
方法二
使用json.dumps進(jìn)行序列化懦底,并自定義序列化規(guī)則
class ComplexEncoder(json.JSONEncoder):
"""
含有 datetime 對(duì)象數(shù)據(jù)轉(zhuǎn) json 時(shí),時(shí)間格式會(huì)報(bào)錯(cuò)
"""
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)