2009-08-26 8 views
8

Je voulais développer une application Django et l'une des fonctionnalités que je voudrais avoir est des listes déroulantes dynamiques ... spécifiquement pour les marques et modèles de véhicules ... en sélectionnant un spécifique make mettra à jour la liste des modèles avec seulement les modèles qui tombent sous cette marque .... Je sais que cela est possible en javascript ou jQuery (ce serait mon meilleur choix si quelqu'un a une réponse) mais je ne sais pas comment y aller à propos de ça. De plus, je voudrais que la marque, le modèle, l'année et la série soient communs alors que les autres attributs comme la couleur, la transmission, etc. soient des variables de sorte que l'on doive seulement entrer la marque, le modèle, l'année et la série. un nouveau véhicule. Toutes les idées seraient très appréciées.Django Liste déroulante dynamique de la base de données

Répondre

9

Les 3 choses que vous mentionnez être commun, marque, modèle, année, seraient les 3 valeurs d'entrée. Lorsqu'il est donné au serveur, un objet contenant les détails sera renvoyé à la page appelante. Cette page analyserait les détails de l'objet (en utilisant JavaScript) et mettrait à jour l'interface utilisateur pour les afficher à l'utilisateur. Du côté de Django, il doit y avoir des facilités pour prendre les 3 entrées, et retourner la sortie. Du côté client, il doit y avoir des facilités pour transmettre les 3 entrées au serveur, puis analyser de manière appropriée la réponse du serveur.

Il existe une structure d'API REST pour Django qui facilite l'ajout de la "API" mentionnée ci-dessus - Piston. À l'aide de Piston, vous devez simplement créer une URL pour cette ressource, puis ajouter un gestionnaire pour le traiter. (Vous aurez toujours besoin d'écumer la documentation du piston, mais cela devrait vous donner une idée de ce qu'il ressemble à)

urls.py: 
vehicle_details = Resource(handler=VehicleDetails) 
url(r'^vehicle/(?<make>.*)/(?<model>.*)/(?<year\d{2,4}/(?P<emitter_format>[a-z]{1,4}), vehicle_details, name='vehicle_details'), 

handler.py: 
class VehicleDetails(BaseHandler): 
    methods_allowed = ('GET',) 
    model = Vehicles #whatever your Django vehicle model is 

    def read(self, request, *args, **kwargs): 
     # code to query the DB and select the options 
     # self.model.objects.filter()...    
     # Build a custom object or something to return 

     return custom_object 

Ceci définit simplement le www.yoursite.com/vehicle/[make]/ url [model]/[year]/json pour renvoyer un objet de données personnalisé dans JSON pour jquery à analyser. Du côté client, vous pouvez utiliser jquery pour configurer un événement (bind) de sorte que lorsque les trois listes déroulantes ont une valeur sélectionnée, il exécute un $ .get() sur l'URL de l'API. Quand il récupère ce résultat, il le passe dans l'analyseur Jquery JSON et donne l'objet personnalisé, en tant qu'objet javascript. Cet objet pourrait ensuite être utilisé pour remplir plus de menus déroulants.

(avertissement Big, je viens d'écrire ce qui suit du haut de ma tête, donc il est pas censé être copier et coller. Il est juste pour l'idée générale.)

<script type="text/javascript"> 

    // On document load 
    $(function() { 
     $('#dropdown_make').bind('change', checkForValues()); 
     $('#dropdown_model').bind('change', checkForValues()); 
     $('#dropdown_year').bind('change', checkForValues()); 
    }); 

    function checkForValues() { 
     if ($('#dropdown_make').val() && $('#dropdown_model').val() && $('#dropdown_year').val()) 
      updateOptions();   
    } 

    function updateOptions() { 
     url = '/vehicle/'; 
     url += $('#dropdown_make').val() + '/'; 
     url += $('#dropdown_model').val() + '/'; 
     url += $('#dropdown_year').val() + '/'; 
     url += 'json/'; 
     $.get(url, function(){ 
      // Custom data object will be returned here 
     }) 
    } 
</script> 

0

Ceci est inquiétante étrangeté: Dynamic Filtered Drop-Down Choice Fields With Django

Sa question:

« Voici la situation: j'ai une base de données avec la voiture marques et modèles Lorsqu'un utilisateur sélectionne une marque, je veux. pour mettre à jour la liste déroulante des modèles avec seulement les modèles associés à cette marque ... Donc je veux utiliser Ajax pour remplir les données. "

Vous n'êtes pas le même gars? :)

+0

Pas la même gars ... c'est juste que nous avons essayé de résoudre le même problème ... merci pour le lien cependant, il semble que ce soit un bon début pour moi. –

+2

Je suis le gars, et c'est étrange :) – Dustin

Questions connexes