我正在寻找一种方法来执行以下操作。
class Foo(db.Model):
__tablename__ = 'foos_foo'
id = db.Column(db.Integer, primary_key=True)
author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
# Not an entity in the table but
# whenever foo.author_name is called,
# it selects the value from User table
author_name = author.name
我正在寻找办法的原因是:
class Foo(db.Model, Serializable):
我创建了一个Serializable mixin,以便foo.serialize只返回json中的行值。
我希望author.name成为此序列化的一部分。当然,有无数其他方法可以获取作者的名称并将其插入到序列化输出中,但为了清洁代码的好处,我希望找到一种方法在模型中包含外来值。
我使用不恰当的“外键”,因为我不知道最合适的关键字是什么。
提前谢谢。
答案 0 :(得分:1)
我最终使用Marshmallow进行对象序列化。
http://marshmallow.readthedocs.org/en/latest/index.html
这些是实施。
model.py
class User(db.Model):
name = db.Column()
class UserSerializer(Serializer):
class Meta:
fields = ('id', 'name')
class FooSerializer(Serializer):
author_name = fields.Nested('UserSerializer')
class Meta:
fields = ('id', 'author_name')
view.py
foos = Foo.query.all()
dict = FooSerializer(foos, many=True).data
答案 1 :(得分:0)
对象不能序列化。 我认为你需要实现一个转换为JSON的方法。 json.dumps适用于dicts。所以你也可以看看。 http://www.marcstober.com/blog/2007/07/07/serializing-arbitrary-python-objects-to-json-using-dict/
您也可以实现自己的方法to_json。