我正在使用django构建一个内部webapp,用于管理这些设备上的设备和分析报告。 目前,抽象分析定义如下:
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模板。 (这里的问题不是如果数据输入应该在Web表单中完成,有很多理由选择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 magic已经使用类属性来定义每个实例的数据。
如何在django模型中添加“类属性”?关于如何解决这个问题的其他想法?
编辑: 现在通过查找类名添加了analysis_type属性。这不需要手动向每个子类添加变量。工作正常,但仍需要手动添加与每个子类对应的AnalysisType条目。如果这也可以由类系统处理,那将是很好的。有什么想法吗?
答案 0 :(得分:2)
返回依赖于特定Analysis子类中的属性的AnalysisType的属性或方法怎么样?
class Analysis(models.Model):
...
@property
def analysis_type(self):
return AnalysisType.objects.get(name=self.analysis_type_name)
class ColorAnalysis(Analysis):
analysis_type_name = 'color'
class DurabilityAnalysis(Analysis):
analysis_type_name = 'durability'