How to add fields url for nested output fields in flask restful

安稳与你 提交于 2020-01-20 09:04:09

问题


I am having difficulty over generating api endpoint urls in nested output fields using [Flask-RESTful][1].

I found that fields.Url('my_endpoint', absolute=True) only generates url inside top url fields not the nested one. It throws werkzeug.routing.BuildError - [Error log gist][1]https://gist.github.com/anonymous/6251c67089871d0e4516

For example here is my url fields

role_fields = {
    'name': fields.String(attribute='title'),
    'id': fields.Integer(attribute='id'),
    'uri': fields.Url('user_endpoint', absolute=True)
}


user_fields = {
    'id': fields.Integer,
    'username': fields.String,
    'email': fields.String,
    'full_name': fields.String(attribute='real_name'),
    'website': fields.String(default=None),
    'bio': fields.String(default=None),
    'created_date': fields.DateTime,
    'modified_date': fields.DateTime,
    'uri': fields.Url('user_endpoint', absolute=True),
    'role': fields.Nested(role_fields),
}

回答1:


The problem was fields.Url needs a required endpoint parameter, In this case its username.

The parameter username is available to user_fields with the returned user object, but the role object user.role does not contain username attribute.

So I assigned 'usernameattribute touser.role` object before returning it.

user = get_user(username) #Get user object from db
user.role.username = user.username
return user


来源:https://stackoverflow.com/questions/26453636/how-to-add-fields-url-for-nested-output-fields-in-flask-restful

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!