Charger automatiquement les options de choix de select2

Ajax n'envoie pas la requette POST

a marqué ce sujet comme résolu.

Bonjour à tous. J’essaie depuis quelques jours de faire fonctionner le plugin select2 avec Django. La documentation en ligne pour utiliser select2 avec django est bien pauvre, contrairement à Php. Bref, m’inspirant de ce que j’ai glané sur le net, j’ai inséré dans mon fichier html, les lignes suivantes:

 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
     <script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet" />
    <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
    <script type="text/javascript">
      $('.itemName').select2({
        placeholder: 'Select an item',
        ajax: {
          url: '/index/get_combo-obj/',
          dataType: 'json',
          delay: 250,
          processResults: function (data) {
            return {
              results: data
            };
          },
          cache: true
        }
      });
    </script>

{% block content %}
<div class="container">

<div style="width:520px;margin:0px auto;margin-top:30px;height:500px;">
  <h2>Choix à partir de la liste</h2>
  <select class="itemName" style="width:100%">
  <option value="3620194" selected="selected">Choisir dans la liste......</option>
</select>
</div>
</div>
{% endblock %}

Le lien est défini dans le fichier urls comme ci -dessous:

1
url(r'^get_combo-obj/$', views.Combo_obj, name='aff_combo_oev'),

Et voici la fonction qui est appelée:

1
2
3
4
5
6
7
def Combo_obj(request):
           if request.method == 'POST':
       ListeChoixobj10 = [("id: " + str(o.CuOev), "text: " + str(o.Nom) + ' ' + str(o.Prenom)) for o in
                           obj.objects.all()]

        Data=dict(ListeChoixobj10)
    return JsonResponse(Data)

Après plusieurs tests, je constate que la requette Ajax n’est pas émise et la fonction n’est jamais appelée, raison pour laquelle les données ne sont pas renvoyées.

Comment résoudre ce problème ? D’avance merci.

Bonjour motet-a. Merci pour ta réponse. Je connais bien la documentation à laquelle du fais référence. Ce plugin de Jquery, faut bien un langage côté serveur pour l’utiliser. C’est bien là qu’interviennent Django ou Php etc.. Et c’est bien là, ma préoccupation. Comme je viens de commencer en programmation web, je suis tout nouveau en Django, et l’autodidacte que je suis, apprend beaucoup par l’exemple. Je trouve beaucoup d’exemples complets d’utilisation de ce plugin en Php. Et presque rien en Django. Du moins, tous les exemple en Django sont de loin, moins complets que ceux en php. J’espérais trouver une aide ici. Bon, j’ai compris que, de ton point de vue ma question est "hors sujet". Merci pour l’éclairage…

Bonsoir à tous. Ma requette Ajax arrive à appeler maintenant la fonction mentionnée dans le premier message. Mais je ne sais pas dans quel format envoyé la réponse de retour. Je m’excuse de parler d’un autre langage, mais la solution que j’ai trouvée en php marche bien. Il s’agit d’un tableau associative à deux dimensions du genre : php $data[] = array('id' => $value['productId'], 'text' => $value['productName']);

c’est tout comme si on a mis en mémoire un fichier à deux champs: id et text. De fait, la documentation de select deux dit précisement que les données doivent être sous ce format.

Alors, ma question est comment réaliser ce format de donnée en django pour l’envoyer comme réponse à select2 ? J’espère que quelqu’un a compris ma question et pourra m’aider. D’avance merci.

Salut !

Il n’est pas vraiment possible de te répondre, il nous manque des informations. Le code PHP que tu montres semble ajouter un hash dans une liste, mais on ne sait pas comment cette liste est sérialisée pour être lisible par select2. JSON ? CSV ?

Si tu ne comprends pas bien ce dont je parle, donne plus de contexte à propos de ce code PHP, par exemple donne le lien où tu l’as trouvé.

Donne également la page de documentation de select2 qui contient ce que tu veux utiliser. Je ne serais pas surpris qu’il accepte une réponse JSON, ce qui rendrait possible de te répondre.

+1 -0

Bonjour Victor. Voici le lien de la page qui propose un exemple en Php: Les données sont sérialisées en JSOM.

Les liens suivants : lien1 lien2 traitent du format des données et de l’envoie de donnée depuis un serveur.

Select2 accepte bien le format JSON. Mais comme je l’ai dit précédemment, je ne sais pas comment passer les données d’un objet de données et les envoyer à Ajax.

La dernière solution que j’ai essayé est la suivante:

1
2
3
4
5
6
7
8
9
def Combo_Oev(request):
   return JsonResponse({'results':[
       {
           'text':str(o.Nom)+' '+str(o.Prenom),
           'id':o.CuOev
       }
       for o in Oev.objects.all()
   ]
   })

Là encore, ça ne marche pas bien.

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