我想知道是否可以使用不属于模型的字段来编组资源,这意味着它从模型类中的方法返回数据。
例如,假设这是我要编组的模型对象(它是实际模型的简化版本)
class Program(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
location = Column(String)
def get_students(self, **kw):
return self._union('students', **kw)
get_students 方法的作用是加入来自其他程序的几个学生列表。
所以,在我看来,我有这个:
@ns.route('/<string:id>')
@api.response(404, 'Program not found.')
class ProgramItem(Resource):
@api.marshal_with(program_with_students)
def get(self, id):
"""
Returns a program with a list of students.
"""
program = Program.query.filter(Program.id == id).one()
return program
这是序列化程序:
program_with_students = api.model('Program with students', {
'id': fields.String(required=True, description='Program identifier'),
'name': fields.String(required=True, description='Program name'),
'location': fields.String(required=True, attribute='location_name', description='Program location'),
})
所以,我的问题是,我如何编组一个我想调用学生的字段并返回 get_students 方法返回的内容?
一直在阅读flask-restplus,我不确定该字段。Raw正是我应该使用的......基本上,我不确定我是否可以在格式方法中引用Program对象......似乎restplus正在传递只是值而不是对主要对象的引用?
编辑:找到解决方案...
只需使用属性并调用 lambda 就可以使它...如此简单:D
'students': fields.List(fields.Nested(program_student), required=True, description='List of students on program',
attribute=lambda obj: obj.get_students())
仅供参考,program_student 只是另一个序列化程序,因为 Student 也是一个模型,但现在这无关紧要