2011-01-21 100 views
1

我正在使用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條目。如果這可以由班級系統來處理,那將會很好。有任何想法嗎?

回答

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' 
+0

是的。這可能會奏效。更好的辦法是獲得類名,而不是你的「analysis_type_name」。我希望正常的班級制度儘可能地處理。 – 2011-01-21 17:24:38

相關問題