2009-08-26 46 views
8

Quería desarrollar una aplicación Django y una de las funcionalidades que me gustaría tener es listas dinámicas desplegables ... específicamente para marcas y modelos de vehículos ... seleccionando una específica make actualizará la lista de modelos solo con los modelos que corresponden. Sé que esto es posible en javascript o jQuery (esta sería mi mejor opción si alguien tiene una respuesta) pero no sé cómo hacerlo al respecto.Django Lista desplegable dinámica de la base de datos

Además, me gustaría que la marca, el modelo, el año y la serie sean comunes y los otros atributos como color, transmisión, etc. sean variables, de modo que solo se necesita ingresar la marca, modelo, año y serie solo para un nuevo vehículo. Cualquier idea sería muy apreciada.

Respuesta

9

Las 3 cosas que mencionas son comunes, marca, modelo, año, serían los 3 valores de entrada. Cuando se entrega al servidor, un objeto que contiene los detalles se devolverá a la página de llamada. Esa página analizará los detalles del objeto (usando JavaScript) y actualizará la UI para mostrarlos al usuario.

Desde el lado de Django, tiene que haber las instalaciones para tomar las 3 entradas y devolver la salida. Desde el lado del cliente, tiene que haber las facilidades para pasar las 3 entradas al servidor, y luego analizar apropiadamente la respuesta del servidor.

Hay un marco API REST para Django que hace que sea bastante fácil agregar la "API" mencionada anteriormente - Piston. Con Piston, solo necesita crear una URL para ese recurso y luego agregar un controlador para procesarlo. (Usted todavía tiene que rozar la documentación del pistón, pero esto debe darle una idea de lo que parece)

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 

Esto simplemente establece el www.yoursite.com/vehicle/[make]/ url [modelo]/[año]/json para devolver un objeto de datos personalizado en JSON para que jquery lo analice.

En el lado del cliente, puede usar jquery para configurar un evento (vincular) para que cuando las 3 listas desplegables tengan un valor seleccionado, ejecute $ .get() a la URL de la API. Cuando obtiene este resultado, lo pasa al analizador Jquery JSON, y le da el objeto personalizado, como un objeto javascript. Ese objeto podría usarse para poblar más menús desplegables.

(Big advertencia, que acabo de escribir lo siguiente de la parte superior de la cabeza, por lo que no está destinado a ser distribuido, copiado y pegado. Es sólo por la idea general.)

<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> 

No es la
0

Esto es asombroso: Dynamic Filtered Drop-Down Choice Fields With Django

Su pregunta:

"Aquí está la situación: Tengo una base de datos con el coche de las marcas y modelos Cuando un usuario selecciona un hacer, quiero. para actualizar el menú desplegable de modelos con solo los modelos asociados con esa marca ... Por lo tanto, quiero usar Ajax para completar los datos ".

¿No eres el mismo chico? :)

+0

el mismo tipo ... es solo que estamos tratando de resolver el mismo problema ... gracias por el enlace, parece un buen comienzo para mí. –

+2

Soy el chico, y esto es extraño :) – Dustin

Cuestiones relacionadas