2011-03-18 4 views
3

Je fais une application avec 3 classes: emploee, compagnie et département. Lorsque je modifie un employé, j'ai besoin de connaître son entreprise, et après avoir un champ avec tous les départements de la société sélectionnée. Mais quand j'utilise ModelChoiceField, je vois tous les départements de toutes les entreprises.Django ModelChoiceField avec options de filtrage instantané

Ce n'est pas une question de priviges. Pour la validation du champ de département, il doit s'agir d'un département de l'entreprise sélectionnée. Mais, je ne veux pas faire une validation pour cela, je dois seulement montrer les départements d'une société spécifique sélectionnée dans le domaine ci-dessus. Comme il s'agit d'une opération côté client, je pense que javascript sera nécessaire, donc je veux savoir si elle est automatisée d'une manière ou d'une autre dans django ou si j'ai besoin de télécharger un django-plugin ou jquery-plugin à cet effet.

J'apprécie toute aide, merci!

+1

Je définirais une vue pour filtrer le département d'une entreprise de sélection. Ensuite, utilisez jQuery pour charger le combo du département lorsque l'entreprise change. – JMira

Répondre

4

Ce n'est pas une chose intégrée pour django et il faudra un peu de piratage, mais j'ai déjà fait ce genre de chose auparavant.

Vous devez joindre une requête jQuery AJAX à un événement onChange pour le champ de sélection de société. Lorsque quelqu'un sélectionne une entreprise, vous interrogez la base de données et demandez une liste de départements spécifiques à cette société.

EDIT:

Quelque chose comme le javascript suivants et django fonctionnera:

$('#id_company').change(function(){ 
    $.POST('{% url some_url_name %}', 
    { 
     'company_id': $('#id_company').val() 
    }, 
    function(data){ 
     if(data.valid){ 
     var d = '<select id="id_department" name="department">'; 
     $.each(data.records, function(k,v){ 
      d += '<option value="' + v.id + '">' + v.name +'</option>'; 
     }); 
     d += '</select>'; 
     $('#id_department').html(d); 
     } 
    }, 'json' 
); 
}); 


def ajax_request(request, company_id): 
    if request.is_ajax() and request.method == 'POST': 
    data = simplejson.dumps(Department.objects.filter(company__id=company_id) 
    return HttpResponse(data, mimetype='application/javascript') 
+0

Comme vous l'avez déjà fait, avez-vous un exemple de code pour moi? – StaticX

+0

J'ai mis le def ajax_request dans le view.py de l'application. Et le js dans le fichier .js. Où puis-je appeler la méthode ajax_request? – StaticX

+0

Ce n'est pas une méthode, il vous suffit de l'ajouter à votre urls.py (et surtout de lui donner un nom, donc vous pouvez accéder à l'url par son nom) puis dans le js, comme indiqué ci-dessus, utilisez {% url name_of_ajax_request_url%} pour sortir l'adresse de l'URL ajax_request. –

Questions connexes