2014-08-28 57 views
0

我有一个相当基本CRUDMixin加载一个to_json方法的关系

class CRUDMixin(object): 
    """ create, read, update and delete methods for SQLAlchemy """ 
    id = db.Column(db.Integer, primary_key=True) 

    @property 
    def columns(self): 
     return [ c.name for c in self.__table__.columns ] 

    def read(self): 
     """ return json of this current model """ 
     return dict([ (c, getattr(self, c)) for c in self.columns ]) 

    # ... 

对于一些像Article类将继承这一点,它可能与另一个类的关系,就像这样:

author_id = db.Column(db.Integer, db.ForeignKey('users.id')) 

唯一真正的问题是它不会返回json中的任何用户详细信息。理想情况下,JSON应该是这样的:

{ 
    'id': 1234, 
    'title': 'this is an article', 
    'body': 'Many words go here. Many shall be unread. Roman Proverb.', 
    'author': { 
    'id': 14 
    'name': 'Thor', 
    'joined': October 1st, 1994 
    } 
} 

因为它是现在,它只是给author_id: 14

我可以通过这种方式检测列是否为关系并将其加载为json?

回答

2

你不得不安装通过添加类似

author = db.relationship("Author") # I assume that you have an Author model 

然后到JSON您的结果有型动物的方式来处理关系整个关系。

看看这2个反应:

jsonify a SQLAlchemy result set in Flask

How to serialize SqlAlchemy result to JSON?

您还可以看看烧瓶的RESTful其提供的方法/装饰(marshal_with)元帅的结果嵌套对象(关系)的一个好方法。

http://flask-restful.readthedocs.org/en/latest/fields.html#advanced-nested-field

相关问题