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
$( "#datepicker" ).datepicker({ onSelect: function(date){ $.ajax({ data: {'hora':date}, url: '/buscar/', type: 'get', success: function(data){ for(var i = 0; i<data.length ; i++){ Medico(data[i].fields.user) Hora(data[i].fields.dias) } }, }); },dateFormat: "yy-mm-dd" }); function Medico(data){ $.ajax({ data: {'doctor':data}, url: '/buscar/doctor/', type: 'get', success: function(data){ var select = $("#doctores"), options = ''; select.empty(); console.log(data) options += '<option value="'+data[0]+'">'+data.fields.first_name+' '+data.fields.last_name+'</option>' select.append(options) }, }); } function Hora(data){ for(var x = 0; x<data.length; x++){ $.ajax({ data: {'hora':data[x]}, url: '/buscar/hora/', type: 'get', success: function(data){ var html = "" for(var h = 0; h<data.length; h++){ html += '<li>'+data[h].fields.dias+'</li><ul><li>'+data[h].fields.horas+'</li></ul>' } $('#horas').html(html) }, }); } }
Métodos de Django
Código Python:
Ver original
def busqueda_hora(request): fecha = request.GET['hora'] fin = timezone.now() + datetime.timedelta(days=20) hora = Medico.objects.filter(dias__dias__range=[fecha, fin]) ctx = serializers.serialize('json', hora) return HttpResponse(ctx, mimetype='application/json') def get_hora(request): h = Hora.objects.filter(id=request.GET['hora']) ctx = serializers.serialize('json', h) return HttpResponse(ctx, mimetype='application/json') def get_doctor(request): d = User.objects.filter(id=request.GET['doctor']) ctx = serializers.serialize('json', d) return HttpResponse(ctx, mimetype='application/json')
Modelos de la aplicación
Código Python:
Ver original
class Medico(models.Model): user = models.ForeignKey(User, unique=True) especialidad = models.CharField(max_length=50) dias = models.ManyToManyField(Hora) def __unicode__(self): return self.user.first_name class HoraMedico(models.Model): medico = models.ForeignKey(Medico, unique=True) hora = models.ForeignKey(Hora, unique=True) from django.db import models DESDE_HORA_CHOICES = ( ('0800', '08:00'), ('0830', '08:30'), ('0900', '09:00'), ('0930', '09:30'), ('1000', '10:00'), ('1030', '10:30'), ('1100', '11:00'), ('1130', '11:30'), ('1200', '12:00'), ('1230', '12:30'), ('1300', '13:00'), ('1330', '13:30'), ('1400', '14:00'), ('1430', '14:30'), ('1500', '15:00'), ('1530', '15:30'), ('1600', '16:00'), ('1630', '16:30'), ('1700', '17:00'), ('1730', '17:30'), ('1800', '18:00'), ('1830', '18:30'), ('1900', '19:00'), ('1930', '19:30'), ('2000', '20:00'), ('2030', '20:30'), ('2100', '21:00'), ('2130', '21:30'), ('2200', '22:00'), ('2230', '22:30'), ('2300', '23:00'), ) class Hora(models.Model): dias = models.DateField() horas = models.CharField(max_length=4, choices=DESDE_HORA_CHOICES) def __unicode__(self): return u'%s, %s' % (self.dias, self.horas)
Saludos