[ flask ] flask-restful 实现嵌套的有关系的输出字段

问题描述:

1. 先说明数据关系:有用户,和菜谱。一个用户可以拥有多个菜谱:一对多的关系

2.  resources/users.py 的输出字段:

user_fields = {
    'id':fields.Integer,
    'username':fields.String,
    'email':fields.String,
    'avatar':fields.String
}

3. resources/cookbooks.py 的输出字段:

cookbook_fields = {
    'id':fields.Integer,
    'name':fields.String,
    'description':fields.String,
    'imageUrl':fields.String,
    'myfoods':fields.String,
    'step':fields.String,
    'author':????
}

如上所述,我想返回一个菜谱的时候同时返回这个菜谱的作者信息(见上面高亮部分),该如何实现呢?

具体实现:

from flask_restful import Resource,fields,marshal_with,reqparse,inputs,marshal
from app.api.resources.users import user_fields

class AuthorRaw(fields.Raw):
    def output(self,key,cookbook):
        return marshal(cookbook.users,user_fields)

cookbook_fields = {
    'id':fields.Integer,
    'name':fields.String,
    'description':fields.String,
    'imageUrl':fields.String,
    'myfoods':fields.String,
    'step':fields.String,
    'author':AuthorRaw
}

如上所示,我们定义 output(self,key,cookbook)方法来覆盖父类的output方法

其中,第二个参数cookbook指向Cookbook的实例,第一个参数是实例中的一个字段

最终效果:

备注:

用 fields.Nested 啊,它不香么

详情见:https://github.com/LongchuanYu/wefoods_backend

原文地址:https://www.cnblogs.com/remly/p/12996008.html