Я использую django для создания внутреннего веб-приложения, в котором управляются устройства и аналитические отчеты на этих устройствах.
В настоящее время абстрактный анализ определяется следующим образом:
class Analysis(models.Model):
project = models.ForeignKey(Project)
dut = models.ForeignKey(Dut) # Device Under Test
date = models.DateTimeField()
raw_data = models.FileField(upload_to="analysis")
public = models.BooleanField()
@property
def analysis_type(self):
s = str(self.__class__)
class_name = s.split('.')[-1][:-2] # Get latest name in dotted class name as remove '> at end
return AnalysisType.objects.get(name=class_name)
class Meta:
abstract = True
Существует несколько различных типов анализа, которые могут быть выполнены на устройстве, с различными результирующими данными.
class ColorAnalysis(Analysis):
value1 = models.FloatField()
value2 = models.FloatField()
...
class DurabilityAnalysis(Analysis):
value1 = models.FloatField()
value2 = models.FloatField()
...
...
Каждый такой анализ создается из листа Excel, размещенного оператором. Существует шаблон Excel, который оператор заполняет для каждого типа анализа.
(Проблема здесь не в том, что ввод данных должен выполняться в веб-форме, есть много причин для выбора пути в Excel)
На странице веб-сайта должны быть перечислены все типы анализа вместе со ссылкой на соответствующий шаблон листа Excel, используемый для отчета об этом анализе.
В настоящее время я определил что-то вроде
class AnalysisType(models.Model):
name = models.CharField(max_length=256 )
description = models.CharField(max_length=1024,blank=True )
template = models.FileField(upload_to="analysis_templates")
но когда я подумал о том, как связать эти данные с различными классами модели результатов анализа, я подумал, что я хочу добавить эти данные в качестве атрибутов классов для каждого типа анализа.
Проблема в том, что атрибуты класса уже используются магией django для определения данных каждого экземпляра.
Как добавить "атрибуты класса" в модели Django? Любые другие идеи о том, как решить эту проблему?
EDIT:
Теперь добавлено свойство analysis_type путем поиска имени класса. Это не требует ручного добавления переменной к каждому подклассу. Работает нормально, но все же требует ручного добавления записи AnalysisType, соответствующей каждому подклассу. Было бы хорошо, если бы это могло быть обработано системой классов. Есть идеи?