1

我想知道是否可以使用不属于模型的字段来编组资源,这意味着它从模型类中的方法返回数据。

例如,假设这是我要编组的模型对象(它是实际模型的简化版本)

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 也是一个模型,但现在这无关紧要

4

0 回答 0