Множественные запросы и проблема с chart js - Оптимизация жесткого кода Django

Здравствуйте друзья. У меня есть проект с лабораторными анализами пациентов. проблема заключается в моем жестком кодировании но я не нашел решения, чтобы сделать это проще.

Моя цель была создать фрейм данных для каждой группы анализа и построить диаграммы. Итак, позвольте мне объяснить, что я сделал /w code:

У меня есть модель анализа пациента:

class PatientAnalysis(models.Model):
    patient = models.ForeignKey(Patient, related_name='analyses', on_delete=models.CASCADE)
    analysis_date = models.DateTimeField(default=datetime.now, help_text = "Разделяйте даты точками! Используйте '/' или '-'")
    # analysis_type = models.IntegerField(choices = ANALYSIS_CHOICES) #перевести в таблицу
    analysis_type = models.ForeignKey(AnalysisType, on_delete=models.CASCADE, default=1)
    analysis_data = models.DecimalField(max_digits=5, decimal_places=2)
    def __str__(self):
        return f"{self.patient}"
    def get_analysis_type(self):
        return f"{self.analysis_type}"
    def get_absolute_url(self):
        return reverse('journal:patient_all_info', kwargs={'hist_num_slug':self.patient.pk})
    class Meta:
        unique_together = ('analysis_date','analysis_type',)

У него есть тип анализа:

class AnalysisType(models.Model):
    a_name = models.CharField(max_length=16)
    a_measur = models.CharField(max_length=16)
    a_ref_min = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True)
    a_ref_max = models.DecimalField(max_digits=5, decimal_places=2, null=True, blank=True)
    analysis_group = models.ManyToManyField(AnalysysGroup)
    def __str__(self):
        return f"{self.a_name}"

Который поставляется с группой анализа:

class AnalysysGroup(models.Model):
    group_name = models.CharField(max_length=32)
    # analysis = models.ManyToManyField(AnalysisType, blank=True)
    def __str__(self):
        return f"{self.group_name}"

Я пытался показать анализы для 1 человека за каждый день и сгруппировать их по типу, затем нарисовать мультитаблицу chartjs:

И наконец, нарисуйте график ChartJs с помощью html

const data = {
      labels: dateChartJs,
      datasets: [
      {% for key, value in d_nodate.items %}
      //Если добавить еще один - будет сдвоенный график
      {   

          label: '{{key}}',
          data: [{% for i in value %}'{{i}}',{% endfor %%}],
          tension: 0.4,
          fill: false,
          spanGaps: true,
          borderWidth: 4,
          datalabels: {
            anchor: 'end',
            align: 'top',
            offset: 10,
            font: {size: 14},
          },   
        },
      {% endfor %}
      ],};

Две основные проблемы, с которыми я столкнулся, это многократное дублирование sql multiple duplicates и одинаковые цвета для таблиц в каждом цикле similar colors in loops

Буду признателен за совет. Спасибо за внимание

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