【发布时间】:2018-01-25 08:13:58
【问题描述】:
我在 SqlAlchemy 中有两个模型,它们彼此具有外键关系。我需要的是,当我将Post 的对象作为json 获取时,它还应该包含User 模型的一些预定义列。
就像在这种情况下,我需要将User 模型的名称列与Post 对象一起返回。
我尝试在 Post 模型中添加一个 json 属性,但它只返回模型。
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(255), unique=True)
name = db.Column(db.String(255))
confirmed = db.Column(db.String(255))
password = db.Column(db.String(255))
created_at = db.Column(db.DateTime())
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
message = db.Column(db.String(255))
created_at = db.Column(db.DateTime())
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
@property
def json(self):
return to_json(self, self.__class__)
def to_json(inst, cls):
"""
Jsonify the sql alchemy query result.
"""
convert = dict()
# add your coversions for things like datetime's
# and what-not that aren't serializable.
d = dict()
for c in cls.__table__.columns:
v = getattr(inst, c.name)
if c.type in convert.keys() and v is not None:
try:
d[c.name] = convert[c.type](v)
except:
d[c.name] = "Error: Failed to covert using ", str(convert[c.type])
elif v is None:
d[c.name] = str()
else:
d[c.name] = v
return json.dumps(d)
【问题讨论】:
-
你能出示
to_json的代码吗? -
@stamaimer 我已经编辑了帖子并添加了功能。
标签: python json flask orm sqlalchemy