Создание графика на основе последнего id, введенного в базу данных

это будет большой вопрос для чтения, так что извините за это, но я не могу разобраться в этом. Я хочу создать график, но только со значениями для последнего добавленного id в базе данных, для этого у меня есть следующая модель:

class Device (models.Model):
patientId = models.IntegerField(unique=True)
deviceId = models.CharField(unique=True,max_length=100)
hour = models.DateTimeField()
type = models.IntegerField()
glucoseValue = models.IntegerField()

У меня есть кнопка загрузки, которая принимает файл txt, преобразует его в файл excel, а затем добавляет каждую строку в базу данных, вот UI: Интерфейс приложения

Для отправки данных я использую следующий код в файле views.py:

def html(request, filename):
#Data for the graph
id = list(Device.objects.values_list('patientId', flat=True).distinct())
labels = list(Device.objects.values_list('hour', flat=True))
glucose_data = list(Device.objects.values_list('glucoseValue', flat=True))
data =  glucose_data
test123 = select_formatted_date(labels)
print(test123)
#f = DateRangeForm(request.POST)
context = {"filename": filename,
           "collapse": "",
           "patientId": id,
           "dataSelection": test123,
           "labels": json.dumps(labels, default=str),
           "data": json.dumps(data),
           #"form": f
           }

Для приема данных у меня есть следующая структура в index.html:

    var ctx = document.getElementById("weeklyChart");
var hourly = document.getElementById("dailyChart");
var myLineChart = new Chart(ctx, {
  type: 'line',
  data: {
    labels: {{ labels|safe}},
    datasets: [{
      label: "Value",
      lineTension: 0.3,
      backgroundColor: "rgba(78, 115, 223, 0.05)",
      borderColor: "rgba(78, 115, 223, 1)",
      pointRadius: 3,
      pointBackgroundColor: "rgba(78, 115, 223, 1)",
      pointBorderColor: "rgba(78, 115, 223, 1)",
      pointHoverRadius: 3,
      pointHoverBackgroundColor: "rgba(78, 115, 223, 1)",
      pointHoverBorderColor: "rgba(78, 115, 223, 1)",
      pointHitRadius: 10,
      pointBorderWidth: 2,
      data: {{ data|safe}},
    }],
  },
  options: {
    maintainAspectRatio: false,
    layout: {
      padding: {
        left: 10,
        right: 25,
        top: 25,
        bottom: 0
      }
    },
    scales: {
      xAxes: [{
        time: {
          unit: 'date'
        },
        gridLines: {
          display: false,
          drawBorder: false
        },
        ticks: {
          maxTicksLimit: 7
        }
      }],
      yAxes: [{
        ticks: {
          maxTicksLimit: 5,
          padding: 10,
          // Include a dollar sign in the ticks
          callback: function(value, index, values) {
            return + number_format(value);
          }
        },
        gridLines: {
          color: "rgb(234, 236, 244)",
          zeroLineColor: "rgb(234, 236, 244)",
          drawBorder: false,
          borderDash: [2],
          zeroLineBorderDash: [2]
        }
      }],
    },
    legend: {
      display: false
    },
    tooltips: {
      backgroundColor: "rgb(255,255,255)",
      bodyFontColor: "#858796",
      titleMarginBottom: 10,
      titleFontColor: '#6e707e',
      titleFontSize: 14,
      borderColor: '#dddfeb',
      borderWidth: 1,
      xPadding: 15,
      yPadding: 15,
      displayColors: false,
      intersect: false,
      mode: 'index',
      caretPadding: 10,
      callbacks: {
        label: function(tooltipItem, chart) {
          var datasetLabel = chart.datasets[tooltipItem.datasetIndex].label || '';
          return datasetLabel + ': ' + number_format(tooltipItem.yLabel);
        }
      }
    }
  }
});

А html выглядит следующим образом:

<div class="col-xl-12 col-lg-12">
                        <div class="card shadow mb-6">
                            <!-- Card Header - Dropdown -->
                            <div
                                class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
                                <h6 class="m-0 font-weight-bold text-primary">Patient Data Over an Week</h6>
                                <div class="dropdown no-arrow">
                                    <a class="dropdown-toggle" href="#" role="button" id="dropdownMenuLink"
                                        data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                        <i class="fas fa-ellipsis-v fa-sm fa-fw text-gray-400"></i>
                                    </a>
                                    <div class="dropdown-menu dropdown-menu-right shadow animated--fade-in"
                                        aria-labelledby="dropdownMenuLink">
                                        <div class="dropdown-header">Dropdown Header:</div>
                                        <a class="dropdown-item" href="#">Action</a>
                                        <a class="dropdown-item" href="#">Another action</a>
                                        <div class="dropdown-divider"></div>
                                        <a class="dropdown-item" href="#">Something else here</a>
                                    </div>
                                </div>
                            </div>
                            <!-- Card Body -->
                            <div class="card-body">
                                <div class="chart-area">
                                    <canvas id="weeklyChart"></canvas>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                </div>

Мой вопрос заключается в том, как я могу отобразить в пользовательском интерфейсе значения меток, которые я передал в представлениях, но только для последнего введенного id? Надеюсь, я понятно объяснил свой вопрос.

Вернуться на верх