我通过自定义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]}
这很好用,除了“创建的”属性(取决于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()
序列化我的所有模型,并且更改它会引起各种各样的问题。
那么,如何仅对上面的self.created
属性而不是json.dumps()
组合并应用此日期时间解决方案?
答案 0 :(得分:0)
您只需修改serialize()
即可返回self.created.isoformat()
。
def serialize(self):
"""Return object data in easily serializeable format"""
return {
'id': self.id,
'created': self.created.isoformat(),
'dishes': [item.serialize() for item in self.dishes]
}