我有这样的事情:
{
"id": 1,
"username": "plasmy",
"userdetails": [
{
"detail": "A Name",
"detail_name": "Full Name",
"id": 1,
"user_id": 1
},
{
"detail": "an@email.com",
"detail_name": "Email",
"id": 2,
"user_id": 1
},
{
"detail": "An Address",
"detail_name": "Address",
"id": 3,
"user_id": 1
},
{
"detail": "999-999-9999",
"detail_name": "Phone Number",
"id": 4,
"user_id": 1
}
]
}
这是使用 Flask_Restless 和 SQLAlchemy 的结果。有一个用户表和一个用户详细信息表,它们放在该 JSON 的用户详细信息部分中。我想要做的是,找到一种数据看起来像这样的方式:
{
"id": 1,
"username": "plasmy",
"userdetails": {
"Full Name": "A Name",
"Email": "an@email.com",
"Address": "An Address",
"Phone Number": "A Phone Number"
}
}
看看我是如何删除 id 的,我使用字段“detail_name”作为键,使用“detail”作为值。我尝试使用预处理器,但它们不起作用,或者我使用错误。我将预处理器放在“子”表中。
这是我尝试做的(但没有奏效):
def detail_sort(results):
return {'user_details': results['userdetails']}
manager.create_api(User, methods=['GET', 'POST'])
manager.create_api(UserDetails, methods=['GET', 'POST'],
preprocessors={
'GET_COLLECTION': [detail_sort]
})
我尝试了 GET_COLLECTION、GET_SINGLE 和 GET_MANY。对此的任何帮助将不胜感激。
更新:这是我根据答案尝试的新代码
from flask import Blueprint
from medinv import manager
from medinv.User.models import User, UserDetails
blueprint = Blueprint('blueprint', __name__)
@blueprint.route('/')
@blueprint.route('/home')
def home():
return "Welcome."
def detail_sort(results):
print(results)
results['userdetails'] = {item['detail_name']: item['detail'] for item in results['userdetails']}
return results['userdetails']
manager.create_api(User, methods=['GET', 'POST'])
manager.create_api(UserDetails, methods=['GET', 'POST'],
postprocessors={
'GET_COLLECTION': [detail_sort]
})