【发布时间】:2019-06-14 18:40:21
【问题描述】:
我使用自定义 JSON serialization() 函数定义了这个菜单模型:
from sqlalchemy.sql import func
class Menu(db.Model):
__tablename__='menu'
id = db.Column(db.Integer, primary_key=True)
created = db.Column(db.DateTime, default=func.now(), nullable=False)
dishes = db.relationship('Dish',
back_populates='menu',
uselist=True)
def serialize(self):
"""Return object data in easily serializeable format"""
return
{ 'id' : self.id,
'created': self.created,
'dishes' : [ item.serialize() for item in self.dishes]}
这很好用,除了“created”属性,它依赖于datetime,它
抛出臭名昭著的TypeError: Object of type 'datetime' is not JSON serializable 错误。
通常,可以通过子类化来解决整个数据字典的日期时间错误,如下所示:
from datetime import datetime
import json
class DateTimeEncoder(json.JSONEncoder):
def default(self, o):
if isinstance(o, datetime):
return o.isoformat()
return json.JSONEncoder.default(self, o)
并像这样调用:
json.dumps(yourobj, cls=DateTimeEncoder)
但我不能用json.dumps()序列化我所有的模型,因为模型中有我自己的serialize(),更改它会导致各种问题。
那么,如果没有json.dumps(),我该如何组合并应用此日期时间解决方案,仅适用于我上面的self.created 属性?
【问题讨论】:
标签: python json datetime flask-sqlalchemy