Une vue qui affiche les donées dans un tableau avec possiblité de modifier ou supprier des éléments, comme dans la partie administration d'un projet

a marqué ce sujet comme résolu.

Bonjour à tous. Je viens de m’inscrire dans le forum. Je suis aussi nouveau en python - Django. Ma préoccupation est très simple. Sa réalisation me fait tourner en rond depuis deux semaines. La voici: comment créer une vue qui affiche les données d’une table ou les réponses d’une requette en tableau, comme dans la partie administration avec possibilité d’ajouter, de modifier et de supprimer des éléments? Merci de votre aide.

Salut et bienvenue !

Voici les étapes juste pour la partie "supprimer", tu devineras probablement comment faire pour la partie "modifier" :

  1. Tu fais une vue qui récupère les données et les affiche sous forme de tableau
  2. Dans ton template tu ajoutes une colonne avec un bouton "supprimer" à chaque ligne, qui quand on le clique envoie une requête POST vers une autre vue, envoyant l’ID de la chose à supprimer
  3. Tu fais une vue "suppression" qui reçoit la requête POST, supprime la chose avec l’ID que cette vue reçoit, et redirige vers le tableau
+0 -0

Bonjour Victor. Merci pour ton mot de bienvenu. J’ai bien compris ta réponse. Cela veut dire aussi que je dois ajouter un autre bouton "modifier" qui va afficher une autre vue avec l’identifiant de l’élément à modifier. Mais je ne sais pas comment récupéré l’identifiant de l’élement sur lequel en a cliqué.

J’ai bien compris ta réponse. Cela veut dire aussi que je dois ajouter un autre bouton "modifier" qui va afficher une autre vue avec l’identifiant de l’élément à modifier.

Oui, ou tu affiches directement le truc modifiable dans un champ de formulaire.

Mais je ne sais pas comment récupéré l’identifiant de l’élement sur lequel en a cliqué.

kanmaber

C’est un simple formulaire HTML. :) Tu peux par exemple mettre la pk dans un input type="hidden".

+0 -0

Vraiment, je ne sais pas encore faire ce qui te parait si simple. Je suis nouveau en développement web. Jusqu’à présent j’avais développé en Delphi. J’en suis à ma première application web. Je voulais commencer avec Joomla. Après 5 semaines, je n’ai pas évolué. Mais en trois jours avec Python-Django j’ai fait ce que je n’arrivais pas à faire avec Joomla. J’ai donc besoin juste d’un coup de pouce. Je sais créer un formulaire, ainsi que mettre des données en tableau. Je pourrais afficher des boutons pour chaque ligne du tableau. Mais comment récupérer l’identifiant de l’élément sur lequel on a cliqué, je ne vois pas encore comment. Serait-ce possible d’avoir un exemple qui pourrait me mettre sur la piste ? Merci d’avance.

Yep, voici un formulaire :

1
2
3
4
<form action="/delete" method="post">
  <input type="hidden" name="delete" value="12">
  <button>Supprimer</button>
</form>

De l’autre côté dans la vue, request.POST.get('delete') == '12' sera True.

Je te recommande également cette lecture : https://docs.djangoproject.com/fr/1.11/ref/csrf/

+0 -0

Bonjour à tous. Bonjour Victor. Tes réponses m’ont été utiles. J’ai pu réaliser un template qui affiche mes données en tableau avec par ligne deux boutons: l’un pour modifier et l’autre pour supprimer l’élement de la ligne. J’ai encore deux autres préoccupations. Voici d’abord la première: comment trier le contenu d’une colonne en cliquant sur son entête ? Puis inverser l’ordre du tri chaque fois qu’on clique à nouveau sur le même entête de colonne ?

Sur le titre de ta colonne, mets un lien vers la page sur laquelle tu es mais qui ajoute un GET dans l’URL, genre sort=date.

Dans ta vue, si request.GET.get('sort') == 'date', ajoute un order_by à ta requête vers la base de donnée.

Dans ton template, sur le titre de ta colonne, si il y a déjà sort=date dans l’URL, change le lien en sort=-date. Dans ta vue, si sort == '-date', trie par ordre inverse.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte