如何在Django中向Models添加类属性?

时间:2011-01-21 12:50:07

标签: python django django-models

我正在使用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条目。如果这也可以由类系统处理,那将是很好的。有什么想法吗?

1 个答案:

答案 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'