问题描述
我正在尝试使用 marshal_with
中的 flask_restful
序列化 JSON 中的 sqlAlchemy 对象列表。对于单个对象,它对我有用。
from flask import Flask
from flask_sqlalchemy import sqlAlchemy
from flask_restful import Resource,Api,marshal_with,reqparse,fields
app = Flask(__name__)
db = sqlAlchemy(app)
api = Api(app)
app.config['sqlALCHEMY_DATABASE_URI'] = 'sqlite:///data.db'
app.config['sqlALCHEMY_TRACK_MODIFICATIONS'] = False
class Person(db.Model):
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(30),nullable=False)
pets = db.relationship('Pet',backref='owner')
def __init__(self,name):
self.name = name
@classmethod
def find_by_id(cls,id):
return cls.query.filter_by(id=id).first()
def save_to_db(self):
db.session.add(self)
db.session.commit()
def delete_from_db(self):
db.session.delete(self)
db.session.commit()
class Pet(db.Model):
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(20),nullable=False)
owner_id = db.Column(db.Integer,db.ForeignKey('person.id'))
def __init__(self,name,owner_id):
self.name = name
self.owner_id = owner_id
@classmethod
def find_by_id(cls,id):
return cls.query.filter_by(id=id).first()
def save_to_db(self):
db.session.add(self)
db.session.commit()
def delete_from_db(self):
db.session.delete(self)
db.session.commit()
pet_serializer = {
'id':fields.Integer,'name':fields.String
}
person_serializer = {
'id':fields.Integer,'name':fields.String,'pets':fields.nested(pet_serializer)
}
person_list_serializer = {
'items':fields.List(fields.nested(person_serializer))
}
class PersonController(Resource):
@marshal_with(person_serializer)
def get(self,id):
person = Person.find_by_id(id)
if person:
return person,200
else:
return {'msg':'Resource not found'},404
class PersonListController(Resource):
@marshal_with(person_list_serializer)
def get(self):
return Person.query.all()
api.add_resource(PersonController,'/person/<int:id>')
api.add_resource(PersonListController,'/persons')
if __name__ == '__main__':
app.run(debug=True,port=5000)
PersonController
get
请求的 API 响应如下:
{
"id": 1,"name": "Leo","pets": [
{
"id": 1,"name": "Spoc"
}
]
}
但是对于 PersonListController
get
请求,我得到的是空响应:
[
{
"items": null
},{
"items": null
}
]
请谁能帮我解决这里的问题。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)