J'ai quelque chose comme ceci:Modification d'un tableau de résultat Flask-Restless
{
"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
}
]
}
Cela vient à la suite de l'utilisation Flask_Restless et SQLAlchemy. Il y a une table pour les utilisateurs et une table pour les détails de l'utilisateur, qui sont placés dans la partie détails de l'utilisateur de ce JSON. Ce que je veux faire est de trouver un moyen dans lequel les données peuvent ressembler à ceci:
{
"id": 1,
"username": "plasmy",
"userdetails": {
"Full Name": "A Name",
"Email": "[email protected]",
"Address": "An Address",
"Phone Number": "A Phone Number"
}
}
Voyez comment je l'ai enlevé les cartes d'identité et je le champ « detail_name » comme la clé et « détail » en tant que valeur. J'ai essayé d'utiliser des préprocesseurs mais ils n'ont pas fonctionné ou peut-être que je les utilise mal. Je mets le préprocesseur dans la table "enfant".
C'est ce que j'ai essayé de faire (mais ne fonctionne pas):
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]
})
J'ai essayé GET_COLLECTION, GET_SINGLE et GET_MANY. Toute aide à ce sujet sera grandement appréciée.
MISE À JOUR: Voici le nouveau code J'ai essayé fonderont sur la réponse
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]
})
Nous vous remercions de votre réponse. J'ai essayé ça et ça n'a pas marché. Je vais modifier mon code views.py dans le post original pour voir si vous pouvez voir quelque chose de mal. De plus, la partie qui dit results ['userdetails'] = .... me donne une erreur en disant que ce n'est pas possible. J'ai essayé de le changer un peu en ne renvoyant que les résultats ['userdetails'] et l'erreur disparaît mais ça ne marche toujours pas. En fait j'ai essayé de faire une impression et ça n'arrive pas (à detail_sort). – plasmy
@plasmy Que recevez-vous comme erreur? Essayez d'abord de définir la valeur des détails de l'utilisateur clé dans les résultats, puis renvoyez-la. Je n'ai pas testé mon code. – Nurjan
Oui, j'ai essayé et l'erreur n'apparaît pas. Le problème est que ça ne fait toujours pas ce que je veux. – plasmy