Ver Mensaje Individual
  #9 (permalink)  
Antiguo 27/03/2016, 14:11
zavres
 
Fecha de Ingreso: marzo-2016
Mensajes: 6
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Gráfico con Highchart con los datos devueltos de una vista

Hola de nuevo.

Aquí sigo con mi intento de crear una gráfica con Highcharts pero por ahora todos los intentos son en vano. He intentado hacerlo aprovechando los datos ya pasados a la plantilla como indica lagardel pero no me muestra nada (div en blanco). Pongo el código que tango actualmente:
- Modelo:
Código Python:
Ver original
  1. class Datos(models.Model):
  2.     idDatos = models.AutoField
  3.     Dispositivo = models.ForeignKey('Dispositivo')
  4.     Temperatura = models.DecimalField(max_digits=5, decimal_places=2)
  5.     Humedad = models.DecimalField(max_digits=5, decimal_places=2)
  6.     Luz = models.DecimalField(max_digits=5, decimal_places=0)
  7.     Fecha = models.DateTimeField(blank=True, null=True)
- Vista:
Código Python:
Ver original
  1. def dispositivo_detail(request, pk):
  2.     datos = Datos.objects.filter(Dispositivo_id=pk).order_by('-Fecha')
  3.     return render(request, 'tc/dispositivo_detail.html', {'datos': datos})
- Script en plantilla:
Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.         var chart;
  3.         $(document).ready(function() {
  4.             chart = new Highcharts.Chart({
  5.                 chart: {
  6.                     renderTo: 'grafico',
  7.                     defaultSeriesType: 'line',
  8.                     margin: [50, 150, 60, 80]
  9.                 },
  10.                 title: {
  11.                     text: 'Datos sensores',
  12.                     style: {
  13.                         margin: '10px 100px 0 0' // center it
  14.                     }
  15.                 },
  16.                 xAxis: {
  17.                     categories: {{datos.Fecha}},
  18.                     title: {
  19.                         text: 'Fecha y Hora'
  20.                     }
  21.                 },
  22.                 yAxis: {
  23.                     title: {
  24.                         text: 'Valores'
  25.                     },
  26.                     plotLines: [{
  27.                         value: 0,
  28.                         width: 1,
  29.                         color: '#808080'
  30.                     }]
  31.                 },
  32.                 tooltip: {
  33.                     formatter: function() {
  34.                             return '<b>'+ this.series.name +'</b><br/>'+
  35.                             this.x +': '+ this.y;
  36.                     }
  37.                 },
  38.                 legend: {
  39.                     layout: 'vertical',
  40.                     style: {
  41.                         left: 'auto',
  42.                         bottom: 'auto',
  43.                         right: '10px',
  44.                         top: '100px'
  45.                     }
  46.                 },
  47.                 series: [{
  48.                     name: 'Temperatura',
  49.                     data: {{ datos.Temperatura }}
  50.                 }, {
  51.                     name: 'Humedad',
  52.                     data: {{ datos.Humedad }}
  53.                 }, {
  54.                     name: 'Luz',
  55.                     data: {{ datos.Luz }}
  56.                 }]
  57.             });
  58.         });    
  59. </script>

Entiendo que lo que falla es que no puedo acceder a los campos del modelo a través del formato {{datos.Campo_de_tabla}} pero no encuentro ninguna forma de acceder a estos campos directamente.
Intenté crear cuatro listas con los distintos valores pero error al intentarlo, cosa que en el shell de django si me sacaba la lista. El código que intenté hacer es:
Código Python:
Ver original
  1. temp = []
  2. humedad = []
  3. luz = []
  4. fecha = []
  5.  
  6. from tc.models import Datos
  7. datos = Datos.objects.filter(Dispositivo_id='AA:BB:CC:DD:EE:FF')
  8. for dato in datos:
  9.     temp.append(dato.Temperatura)
  10.     humedad.append(dato.Humedad)
  11.     luz.append(dato.Luz)
  12.     fecha.append(dato.Fecha

Supongo que esas cuatro listas si las paso como parámetros para el script funcionaría pero no soy capaz de crearlas dentro de la plantilla.

¿que estoy haciendo mal? Estoy muy perdido.

Saludos y gracias