У меня есть что-то вроде этого:
{
"id": 1,
"username": "plasmy",
"userdetails": [
{
"detail": "A Name",
"detail_name": "Full Name",
"id": 1,
"user_id": 1
},
{
"detail": "[email protected]",
"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": "[email protected]",
"Address": "An Address",
"Phone Number": "A Phone Number"
}
}
Посмотрите, как я удалил идентификаторы и использовал поле «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]
})
Traceback (most recent call last): File "run.py", line 1, in <module> from medinv import app File "/Users/myname/PycharmProjects/MedInvAPI/medinv/__init__.py", line 10, in <module> from medinv.User.views import blueprint File "/Users/myname/PycharmProjects/MedInvAPI/medinv/User/views.py", line 15 return results['userdetails'] = {item['detail_name']: item['detail'] for item in results['userdetails']} ^ SyntaxError: invalid syntax
Я отредактировал код, чтобы показать, как я исправил эту ошибку. С этим кодом я не получаю ошибку. 13.06.2017create_api()
? 13.06.2017