Множественные запросы и проблема с 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 и одинаковые цвета для таблиц в каждом цикле
Буду признателен за совет. Спасибо за внимание