Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Lier un champ à une requête JSON(P)

+2 votes

J'ai une application d'annuaire qui contient des gens, et qui stocke des gens avec leurs position hiérarchique, leur métier... Cette application utilise DRF pour publier les données via un service REST, pou JSON et JSONP.

Dans une autre application, je souhaites lier ces personnes à des instances de model, et proposer :

  • Dans le backend, la recherche / nom pour lier ces personnes à un champ URL,
  • Dans la frontend, afficher les donnés concernant ces personnes.

Les 2 applications ont des URL différentes, d'où le JSONP.

  • Connaissez-vous un widget qui permette de récupérer l'URL de la personne pour la stocker dans une table (sous forme d'URL), en proposant un mini-moteur de recherche à la autocomplete par exemple ?
  • Pour l'affichage de données, je peux faire un bout de script jQuery pour récupérer les personnes, et les afficher.
demandé 17-Jun-2016 par frague (484 points)

1 Réponse

0 votes

DRF fourni déjà l'URL de la personne à travers son serialiser si ce dernier à un champ URL et qu'il hérite de HyperlinkSerializer. Pour le moteur de recherche, va falloir le coder à la main. L'autocomplete existe en JS, mais le côté stockage, va falloir que tu le gères toi-même.

Quand à la deuxième question, je n'ai rien pigé.

répondu 23-Jun-2016 par Sam (4,974 points)

En fait, je souhaite stocker l'URL d'un objet JSON.
Mon model A contient un champ URL

class A(models.Model):
    ...
    linked_people = models.URLFiled()
    ...

Pour l'utilisateur, dans l'interface d'admin, quand il souhaite lier un objet A à un objet People (depuis la service JSON), il clique sur un bouton qui affiche un popup et qui lui permet de rechercher et de sélectionner un item.
Quand il a trouvé, la valeur s'enregistre sous forme d'URL dans le champ ad hoc. Le popup doit ressembler aux popups de l'admin standard.

Dans l'interface publique de l'application, le service JSON est à nouveau consulté, pour cette fois afficher l'objet lié. Cette partiie est effectuée côté-client, à travers une requête AJAX (jQuery).

Je cherche à savoir si quelqu'un a déjà codé un truc comme ça, ou si à votre connaissance un tel widget existe. Il pourrait par exemple avoir comme paramètres l'URL de base de l'API Rest, les filtres de recherche.

Malheureusement "url d'un objet JSON" ne veut rien dire. Dump ton schéma de données et les specs de ta DB.

L'"objet JSON" est une serialisation DRF d'un objet de la base de donnés "tiers", de la forme :

{
    "pk": 10, 
    "last_name": "Hollande", 
    "first_name": "François",
    "phone_number": "0601020304"
    "address": "Palais de l'Élysée, 75008, Paris"
}

Je souhaite enregistrer dans ma base de donnée principale un "soft link" vers cet objet . Le "soft link" prendra la forme de l'URL complète de cet objet, et je consulterai le contenu de cet objet dans la partie front de mon application.
.
Idéalement, les données dans le popup de formulaire sont présentées sous forme de tableau (paginé), avec un petit moteur de recherche qui filtre les entrées affichées, un bouton radio au début de chaque ligne. Cliquer sur ce radio permet de sélectionner la personne, un bouton valider ferme la fenêtre et met à jour la valeur du champ dans le formulaire primaire.

PS : tu peux noter le 06 de François Hollande, il est bon ;)

Dans ce cas l'URL est créé en fonction du router DRF sur lequel tu map ton viewset. Tu peux faire une vue qui prend en paramètre un mot clé, et retourne une liste de valeurs pour la look up key de ton objet, et fait un url reverse(). Puis tu fais un formulaire pour l'admin qui inject du JS qui appelle cette vue en AJAX.

routers et viewsets sont des concepts DRF, il te faut donc regarder la doc de DRF comment ça marche. Pour la vue, c'est du pur routing et modèle Django, donc regarde côté ORM et routing dans la doc Django. Quand au JS, regarde comment on customize l'administration de Django pour créer un champ custo.

Note que si il y a des termes que tu ne comprends pas dans cette réponse, il faut le préciser. Ces technos utilisent beaucoup de jargon, et ce que tu veux faire demande de toucher à beaucoup de notions. J'ai répondu en partant du principe que tu connaissais bien les technos, mais je peux comprendre si ce n'est pas le cas.

...