我有一个自定义方法,用于在Flask中将SQLAlchemy对象作为字典返回:
class Script(db.Model):
__tablename__ = "script"
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(144), index=True)
audio_filename = db.Column(db.String(144))
@property
def audio_file_path(self):
return os.path.join(app.config['UPLOAD_FOLDER'], 'voices/', self.audio_filename)
def as_dict(self):
return {c.name: getattr(self, c.name) for c in self.__table__.columns}
这适用于列字段,但我还想包含模型属性的返回值。
我的问题是,在字典中返回@property
audio_file_path
def as_dict(self):
d = {c.name: getattr(self, c.name) for c in self.__table__.columns}
d['audio_file_path'] = self.audio_file_path
return d
值的最pythonic方法是什么。
我知道这有效:
{{1}}
但它不是很漂亮。
答案 0 :(得分:3)
如果您使用property
装饰器的多个属性,则可以使用vars
遍历该类并检查该项是否为property
。
def as_dict(self):
props = {k: getattr(self, k) for (k, v) in vars(self.__class__).items()
if type(v) is property}
columns = {c.name: getattr(self, c.name) for c in self.__table__.columns}
columns.update(**props)
return columns