【发布时间】:2015-01-08 03:32:09
【问题描述】:
摘要可能很混乱,但我不知道如何更简洁地表述它。
我拥有的模型:
class Movie(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(
imdb_data = db.relationship('IMDBData', uselist=False)
class IMDBData(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(255))
rating = db.Column(db.Float)
movie_id = db.Column(db.Integer, db.ForeignKey('movie.id'))
使用 Flask-Restful 字段,我正在编组这样的响应:
imdb_data_fields = {
'id': fields.Integer,
'title': fields.String,
'rating': fields.Float
}
movie_fields = {
'id': fields.Integer,
'title': fields.String
}
class MovieListAPI(Resource):
def __init__(self):
self.parser = reqparse.RequestParser()
super(MovieListAPI, self).__init__()
def get(self):
self.parser.add_argument('imdb_data', type=str, location='args')
args = self.parser.parse_args()
m_fields = copy.copy(movie_fields)
# TODO: Return empty object if movie.imdb_data = None
if args['imdb_data']:
m_fields['imdb_data'] = fields.Nested(imdb_data_fields)
movies = Movie.query.all()
return {'movies': marshal(movies, m_fields)}
现在,如果电影没有对应的imdb_data 记录,即Movie.query.filter_by(id=123).first().imdb_data = None,那么电影的对象会像这样编组:
{
"id": 1302,
"imdb_data": {
"id": 0,
"rating": null,
"title": null
},
"title": "F 63 9 Love Sickness"
}
我希望响应看起来像这样:
{
"id": 1302,
"imdb_data": {},
"title": "F 63 9 Love Sickness"
}
当我返回一部电影(通过 id)时,我知道如何破解这个:
if args['imdb_data']:
if movie.imdb_data:
m_fields['imdb_data'] = fields.Nested(imdb_data_fields)
else:
m_fields['imdb_data'] = fields.Nested({})
但是我如何为电影列表做到这一点?也许我可以自己遍历数组并手动更改它,但必须有更有效的方法。
【问题讨论】:
标签: flask flask-sqlalchemy flask-restful