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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 311
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

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