如何将类属性添加到Django中的模型?
问题描述:
我正在使用django构建一个内部Web应用程序,其中管理这些设备上的设备和分析报告。 目前抽象分析的定义如下:如何将类属性添加到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 magic已经使用类属性来定义每个实例的数据。
如何向django模型添加“类属性”?任何其他想法如何解决这个问题?
编辑: 现在通过查找类名称添加了analysis_type属性。这不需要为每个子类手动添加变量。工作正常,但仍需要手动添加与每个子类对应的AnalysisType条目。如果这可以由班级系统来处理,那将会很好。有任何想法吗?
答
如何返回依赖于特定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'
是的。这可能会奏效。更好的办法是获得类名,而不是你的“analysis_type_name”。我希望正常的班级制度尽可能地处理。 – 2011-01-21 17:24:38