Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/10/2014, 15:13
Kurassier
 
Fecha de Ingreso: octubre-2011
Mensajes: 27
Antigüedad: 12 años, 6 meses
Puntos: 2
Django: Consulta Ajax a multiples tablas

Estimados,
tengo el siguiente problema que me ha estado molestando por casi una semana, explico un poco el caso para ver si alguien se le ocurre alguna solución.
Estoy generando un sistema para tomas horas médicas, por medio de un Datepicker, selecciono la fecha de interés, la cual es enviada por medio de ajax a una función e django, la cual me retorna el o los Médicos disponibles en un rango de 10 días (aprox.)
El problema es el siguiente, logro recuperar los datos del médico(nombre, especialidad) y los id de las horas disponibles por medio de JSON con la propiedad de serializer(pondré el código), el problema es que debo hacer la consulta a la tabla de Horas para recuperar cuales los rangos, por lo que uso un for para recorrer el JSON y hacer las consultas correspondientes, lo cuál el método va reescribiendo en la página los datos y no dejándolo como una lista.

Acá les dejo el código para ver si me puede orientar un poco

Ajax
Código Javascript:
Ver original
  1. $( "#datepicker" ).datepicker({
  2.                 onSelect: function(date){
  3.                     $.ajax({
  4.                         data: {'hora':date},
  5.                         url: '/buscar/',
  6.                         type: 'get',
  7.                         success: function(data){
  8.                             for(var i = 0; i<data.length ; i++){
  9.                                 Medico(data[i].fields.user)
  10.                                 Hora(data[i].fields.dias)
  11.                             }
  12.  
  13.                         },
  14.                     });
  15.                 },dateFormat: "yy-mm-dd"
  16.             });
  17.  
  18.             function Medico(data){
  19.  
  20.  
  21.                     $.ajax({
  22.                         data: {'doctor':data},
  23.                         url: '/buscar/doctor/',
  24.                         type: 'get',
  25.                         success: function(data){
  26.  
  27.                         var select = $("#doctores"), options = '';
  28.                         select.empty();
  29.                         console.log(data)
  30.                                 options += '<option value="'+data[0]+'">'+data.fields.first_name+' '+data.fields.last_name+'</option>'
  31.  
  32.                             select.append(options)
  33.  
  34.  
  35.                         },
  36.  
  37.                     });
  38.  
  39.  
  40.             }
  41.  
  42.             function Hora(data){
  43.  
  44.                 for(var x = 0; x<data.length; x++){
  45.                     $.ajax({
  46.                         data: {'hora':data[x]},
  47.                         url: '/buscar/hora/',
  48.                         type: 'get',
  49.                         success: function(data){
  50.                             var html = ""
  51.                             for(var h = 0; h<data.length; h++){
  52.                                 html += '<li>'+data[h].fields.dias+'</li><ul><li>'+data[h].fields.horas+'</li></ul>'
  53.                             }
  54.                             $('#horas').html(html)
  55.                         },
  56.                     });
  57.                 }
  58.             }


Métodos de Django
Código Python:
Ver original
  1. def busqueda_hora(request):
  2.     fecha = request.GET['hora']
  3.     fin = timezone.now() + datetime.timedelta(days=20)
  4.     hora = Medico.objects.filter(dias__dias__range=[fecha, fin])
  5.     ctx = serializers.serialize('json', hora)
  6.  
  7.     return HttpResponse(ctx, mimetype='application/json')
  8.  
  9.  
  10. def get_hora(request):
  11.     h = Hora.objects.filter(id=request.GET['hora'])
  12.     ctx = serializers.serialize('json', h)
  13.  
  14.     return HttpResponse(ctx, mimetype='application/json')
  15.  
  16.  
  17. def get_doctor(request):
  18.     d = User.objects.filter(id=request.GET['doctor'])
  19.     ctx = serializers.serialize('json', d)
  20.  
  21.     return HttpResponse(ctx, mimetype='application/json')

Modelos de la aplicación

Código Python:
Ver original
  1. class Medico(models.Model):
  2.     user = models.ForeignKey(User, unique=True)
  3.     especialidad = models.CharField(max_length=50)
  4.     dias = models.ManyToManyField(Hora)
  5.  
  6.     def __unicode__(self):
  7.         return self.user.first_name
  8.  
  9.  
  10. class HoraMedico(models.Model):
  11.     medico = models.ForeignKey(Medico, unique=True)
  12.     hora = models.ForeignKey(Hora, unique=True)
  13.  
  14. from django.db import models
  15.  
  16.  
  17. DESDE_HORA_CHOICES = (
  18.     ('0800', '08:00'),
  19.     ('0830', '08:30'),
  20.     ('0900', '09:00'),
  21.     ('0930', '09:30'),
  22.     ('1000', '10:00'),
  23.     ('1030', '10:30'),
  24.     ('1100', '11:00'),
  25.     ('1130', '11:30'),
  26.     ('1200', '12:00'),
  27.     ('1230', '12:30'),
  28.     ('1300', '13:00'),
  29.     ('1330', '13:30'),
  30.     ('1400', '14:00'),
  31.     ('1430', '14:30'),
  32.     ('1500', '15:00'),
  33.     ('1530', '15:30'),
  34.     ('1600', '16:00'),
  35.     ('1630', '16:30'),
  36.     ('1700', '17:00'),
  37.     ('1730', '17:30'),
  38.     ('1800', '18:00'),
  39.     ('1830', '18:30'),
  40.     ('1900', '19:00'),
  41.     ('1930', '19:30'),
  42.     ('2000', '20:00'),
  43.     ('2030', '20:30'),
  44.     ('2100', '21:00'),
  45.     ('2130', '21:30'),
  46.     ('2200', '22:00'),
  47.     ('2230', '22:30'),
  48.     ('2300', '23:00'),
  49. )
  50.  
  51.  
  52. class Hora(models.Model):
  53.     dias = models.DateField()
  54.     horas = models.CharField(max_length=4, choices=DESDE_HORA_CHOICES)
  55.  
  56.     def __unicode__(self):
  57.         return u'%s, %s' % (self.dias, self.horas)


Saludos