2014-08-28 1 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?

Вы также можете взглянуть на колбу-успокоительные, которые обеспечивают метод/декоратор (marshal_with) маршалу свои результаты в хороший способ с вложенным объектом (отношениями).

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