2011-01-21 6 views
1

저는 장고를 사용하여 장치에 대한 장치 및 분석 보고서가 관리되는 내부 웹 응용 프로그램을 구축하고 있습니다. 는 현재 추상적 인 분석은 다음과 같이 정의된다 :어떻게 클래스 속성을 장고 모델에 추가 할 수 있습니까?

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") 

좋아하지만 그래도 난 내가 그 불구하고 서로 다른 분석 결과 모델 클래스에 I를이 데이터를 연결 할 방법에 대해 내가 뭘 원하는 클래스로이 데이터를 추가 할 때 각 분석 유형에 대한 속성 문제는 클래스 속성이 장고 마법에 의해 이미 사용되어 각 인스턴스의 데이터를 정의한다는 것입니다.

"클래스 속성"을 장고 모델에 어떻게 추가합니까? 이 문제를 해결하는 방법에 대한 다른 아이디어가 있습니까?

EDIT : 이제 클래스 이름을 조회하여 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"대신 클래스 이름을 얻는 것입니다. 나는 정상적인 계급 체계가 가능한 한 많이 다루기를 바란다. –

관련 문제