У меня есть эта модель меню, определенная с помощью пользовательской функции 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]}
Это прекрасно работает, за исключением атрибута «create», зависящего от 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()
?