我想知道是否可以使用不属于模型一部分的字段来编组资源,这意味着它会从模型类中的方法返回数据。
例如,让我们假设这是我想要编组的模型对象(它是实际模型的简化版本)
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,我不确定field.Raw正是我应该使用的...基本上,我不确定我可以在{{3}中引用Program对象} method ...似乎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也是一个模型,但现在这是无关紧要的