IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Utilisation JQuery dans interface admin Django


Sujet :

Django Python

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut Utilisation JQuery dans interface admin Django
    Bonjour,

    je souhaite conditionner certains champs et liste déroulante d'un formulaire de l'interface admin (change_form.html) en fonction d'un champ de ce même formulaire

    je dois donc utiliser du JS.... mais je ne sais pas trop comment commencre/procéder
    et je ne trouve pas d'exemples...
    quelqu'un aurait-il un exemple ?

    d'avance merci pour votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par OZ1977 Voir le message
    je dois donc utiliser du JS.... mais je ne sais pas trop comment commencre/procéder
    et je ne trouve pas d'exemples...
    Si vous passez à côté de la documentation qui a tout un chapitre (et des exemples) sur ce sujet...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut çà m'aide beaucoup...
    bonjour,

    j'avais bien lu cette partie de la documentation Django mais je n'ai pas trouvé d'exemples concrets

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par OZ1977 Voir le message
    J'avais bien lu cette partie de la documentation Django mais je n'ai pas trouvé d'exemples concrets
    Elle contient un déjà un exemple "concret" i.e. qui ajoute du javascript à change_form.html.

    Après si vous voulez autre chose, ben, le but d'une documentation est d'expliquer comment le construire et si vous ne décrivez pas ce que vous avez cherché à faire, les difficultés que vous rencontrez, ...
    On va juste pouvoir vous suggérer de trier les articles que votre moteur de recherche va pointé lorsque vous entrez les mots clefs "django admin jquery": çà sera aussi plein d'exemples qui ne répondront sans doute pas à votre besoin mais comme on n'est pas dans votre tête, on ne saura pas trier à votre place.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut
    je débute en Django et j'ai quelques bases en JS
    je trouve Django puissant mais également très 'abstrait' comme tout framework
    et la documentation n'est pas si simple je trouve
    j'ai fait les tutoriels de la doc pour débuter (et en guise de formation) et commence maintenant le développement sur un projet pour mon travail

    j'utilise les formulaires d'administration Django pour la saisie dans une base de données
    je souhaite ajouter du JS à mes formulaires admin

    partons sur un exemple concret
    j'ai créé un modèle permettant de saisir des données de biologie composé de 2 classes BiologicalAssessment et BiologicalExam
    puis j'ai personnalisé un peu mes formulaires (un formulaire 'BiologicalAssessment ' et un sous formulaire 'BiologicalExam')

    j'obtiens donc le formulaire de saisie ci-dessous
    ce que je souhaite, c'est ajouter du code JS :
    1. pour conditionner les modalités de la liste déroulante UNITE en fonction de la valeur sélectionnée dans la liste déroulante TYPE D'EXAMEN
    2. pour masquer ou faire apparaitre certains champs (LIMITE INFERIEURE ET LIMITE SUPERIEURE) en fonction de la valeur sélectionnée dans la liste déroulante TYPE D'EXAMEN

    mon problème c'est déjà de savoir où je dois l'écrire

    en gros, ce que j'ai appris en JS, c'est créer une balise <script></script> dans laquelle je peux écrire du code JS qui sera exécuté à l'ouverture de la page

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <script>
        //lancé une fois
        $(document).ready(function() {
     
          //Evènement sur le click de l''élément dans ma page
          //ici mon sélecteur serait $('#id_examen-0-bio_exa_cod') avec incrémentation en fonction de la ligne
          $('selecteur_JQuery').click(function(){
              //code
              alert('cool j\'ai réussi à exécuter du code JS dans DJango !');
          });
     
        });
    </script>

    une fois que j'aurais pu faire l'équivalent sur un click dans un change_form.html, je pourrai avancer

    dans la documentation, je ne comprends ce qu'ils entendent par
    Il peut être souhaitable d’exécuter du code JavaScript lorsqu’un sous-formulaire est ajouté ou enlevé dans un formulaire de modification du site d’administration.
    formulaire de modification (change_form.html) :

    Nom : biology.png
Affichages : 309
Taille : 161,5 Ko



    models.py

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    #############################Biologie###############################################
    class BiologicalAssessment(SafeDeleteModel):
    	""" A class to create a biological assessment instance. """
    	""" bio_prv_dat can not be incomplete """
     
    	_safedelete_policy = SOFT_DELETE_CASCADE
    	ide = models.AutoField(primary_key=True)
    	vis_ref = models.ForeignKey(Visite, verbose_name='Visite', related_name='bilan',
    		on_delete=models.CASCADE)
    	bio_prv_dat = models.DateField("Date de prélèvement")
    	log = HistoricalRecords()
     
    	class Meta:
     
    		db_table = 'crf_bio'
    		verbose_name_plural = 'Bilans'
    		ordering = ['vis_ref','ide']
     
            @property
    	def dateVisite(self):
    		return self.vis_ref.vis_dat
    	dateVisite.fget.short_description = u'Date de la visite'
     
            @property
    	def participante(self):
    		return self.vis_ref.pat_ref
    	participante.fget.short_description = u'Participante'
     
    	def __str__(self):
    		#return f"{self.ide} ({self.vis_ref.pat_ref})"
    		return f"{self.vis_ref.pat_ref}"
    #	__str__.fget.short_description = u'test'
     
     
    class BiologicalExam(SafeDeleteModel):
    	""" A class to create a biological exam instance. """
    	_safedelete_policy = SOFT_DELETE_CASCADE
    	ide = models.AutoField(primary_key=True)
    	bio_ref = models.ForeignKey(BiologicalAssessment, verbose_name='Bilans', related_name='examen',
    		on_delete=models.CASCADE)
    	bio_exa_cod = models.CharField("Type d'examen", max_length=3)
    	bio_exa_val = models.FloatField("Résultat de l'examen")
    	bio_exa_uni = models.CharField("Unité", max_length=50)
    	bio_exa_val_inf = models.FloatField("Limite inférieure")
    	bio_exa_val_sup = models.FloatField("Limite supérieure")
    	log = HistoricalRecords()
     
    	class Meta:
    		db_table = 'crf_bio_exa'
    		verbose_name_plural = 'Examens'
    		ordering = ['bio_ref','ide']
     
    	def __str__(self):
    		return f"{self.ide}"
    admin.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    #############################Biology#####################################
     
    class BiologicalExamFormAdmin(forms.ModelForm):
        """ A class to customised the admin form for BiologicalAssessment. """
        """ Ajouter une code thésaurus correspondants à la liste des examens disponibles """	
        EXAMENS = Thesaurus.options_list(1)
        UNITE = [(1, u'unité 1'),(2, u'unité 2'), (3, u'unité 3')]
        bio_exa_cod = forms.ChoiceField(label="Type d'examen", widget=forms.Select, choices=EXAMENS)
        bio_exa_uni = forms.ChoiceField(label="Unité", widget=forms.Select, choices=UNITE)
     
    """ Personalisation formulaire examen """
    class BiologicalExamAdmin(admin.ModelAdmin):
     
        list_display = ('bio_exa_cod', 'bio_exa_val', 'bio_exa_uni', 'bio_exa_val_inf','bio_exa_val_sup')
     
    """ Sous-formulaire Examen dans formulaire Bilan """
    class BiologicalExamInline(admin.TabularInline):
     
        model = BiologicalExam
        extra = 3
        form = BiologicalExamFormAdmin
     
    """ Personalisation formulaire Bilan """
    class BiologicalAssessmentAdmin(admin.ModelAdmin):
     
        list_display = ('ide', 'participante', 'bio_prv_dat', 'dateVisite')
        search_fields = ['participante','bio_prv_dat','dateVisite']
        inlines = [BiologicalExamInline]
     
    ##########################################################################
    admin.site.register(BiologicalAssessment, BiologicalAssessmentAdmin)

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par OZ1977 Voir le message
    mon problème c'est déjà de savoir où je dois l'écrire
    La documentation propose d'écrire le code javascript dans un fichier et de l'inclure via:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    {% block admin_change_form_document_ready %}
    {{ block.super }}
    <script type="text/javascript" src="{% static 'app/formset_handlers.js' %}"></script>
    {% endblock %}
    en gros, ce que j'ai appris en JS, c'est créer une balise <script></script> dans laquelle je peux écrire du code JS qui sera exécuté à l'ouverture de la page
    La différence est juste dans la forme: dans un cas le javascript est "inline", dans l'autre récupéré dans un fichier.

    Et normalement en ayant effectué une lecture "active" de la documentation i.e. essayer de faire fonctionner le code donné en exemple plutôt que juste le lire, vous auriez pu constater que çà fonctionne et avoir la curiosité de remplacer le fichier .js par un inline en direct dans la balise <script>.... </script>.

    A défaut, je suis désolé mais pour moi, vous n'avez pas encore la maturité suffisante en programmation Web pour vous lancer dans Django: c'est trop compliqué. Essayez un framework plus simple.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut
    c'est un peu dur à entendre...
    j'ai essayé ce que vous suggérer et si je poste c'est que je n'arrive pas à le faire fonctionner
    dans mes tests de "développeur immature", j'ai simplement pu déclencher un pop-up alert à l'ouverture de mon formulaire change_form.html
    après cela, rien de ce que je fais ne fonctionne

    si chaque fois que l'on pose une question sur un forum d'entre-aide, on nous répond systématiquement d'aller lire la doc...
    je ne demande pas que l'on m'écrive mon code, mais d'être un peu guidé

    j'ai découvert Django il y a 15 jours donc un peu d'indulgence

    si vous n'avez pas envie d'aider des "développeurs web non matures" personne ne vous oblige à répondre aux discussions, çà ne nous apporte rien si ce n'est de se sentir encore plus nulle

    je vous souhaite un bon week end

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par OZ1977 Voir le message
    dans mes tests de "développeur immature", j'ai simplement pu déclencher un pop-up alert à l'ouverture de mon formulaire change_form.html
    Et bien vous savez, à priori, comment inclure du Javascript dans votre page HTML (donc vous savez où l'écrire) et à partir de là, Django a fait son boulot et c'est le navigateur Web qui va exécuter ce Javascript.

    Citation Envoyé par OZ1977 Voir le message
    si chaque fois que l'on pose une question sur un forum d'entre-aide, on nous répond systématiquement d'aller lire la doc...
    Un serveur Web, c'est un empilage d'abstractions. Si vous n'arrivez pas à discerner dans quelle couche regarder, vous êtes perdu et incapable de fournir les informations pertinentes pour qu'on vous aide.

    Regardez le fil de cette discussion. Vous commencez par vous plaindre de ne pas trouver d'exemples, je vous signale celui de la documentation. Vous relancez avec "je ne sais pas où mettre le Javascript". Je vous explique des bases et vous relancez en laissant entendre que le code de ce Javascript ne fait pas ce que vous voulez.
    Concrètement vous êtes en incapacité de décrire le problème que vous avez.

    Un forum ne remplace pas une personne derrière vous qui comprendra ce que vous faites parce qu'il peut "voir".

    Prenez une bibliothèque normale. Un débutant poste un code qui ne fonctionne pas et peut raconter un peu n'importe quoi. On lit la prose en diagonale et on se concentre sur le code, on diagnostique le problème et on peut lui donner une solution.

    Avec Django, décrire un problème, c'est une autre paire de manche. Vous n'allez pas poster l'application, la base de données,... et espérer que quelqu'un va rapatrier çà chez lui pour le faire tourner et le réparer (pas grand monde a le temps).
    Vous allez raconter une histoire et l'illustrer par des bouts de code qui vous semblent pertinents. Et cette histoire là devra parler aux gens qui connaissent Django (si vous voulez qu'ils vous aident).
    Et votre niveau de connaissance devra être bien plus important qu'une bibliothèque lambda.

    Citation Envoyé par OZ1977 Voir le message
    j'ai découvert Django il y a 15 jours donc un peu d'indulgence
    Une formation Django, c'est plutôt quelques mois à compléter avec l'intégration dans une équipe projet où vous aller travailler/progresser sous la direction de ceux qui savent. Donc je ré-itère: choisissez un framework plus facile à apprendre.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [Spip] [Spip v2.1.8] - Comment utiliser jQuery dans un squelette personnel ?
    Par [ZiP] dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 18/01/2011, 13h25
  2. Réponses: 2
    Dernier message: 17/01/2011, 22h04
  3. Fonction JavaScript utilisant JQuery dans un html
    Par pikachu56 dans le forum jQuery
    Réponses: 1
    Dernier message: 12/05/2010, 11h14
  4. Réponses: 2
    Dernier message: 05/11/2009, 17h38
  5. Mise en page Interface Admin Django
    Par jacquesdx dans le forum Django
    Réponses: 2
    Dernier message: 21/01/2009, 13h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo