저는 장고를 사용하여 장치에 대한 장치 및 분석 보고서가 관리되는 내부 웹 응용 프로그램을 구축하고 있습니다. 는 현재 추상적 인 분석은 다음과 같이 정의된다 :어떻게 클래스 속성을 장고 모델에 추가 할 수 있습니까?
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 항목을 수동으로 추가해야합니다. 이것이 클래스 시스템에 의해서도 처리 될 수 있다면 좋을 것입니다. 어떤 아이디어?
예. 그것은 아마 작동 할 것입니다. 더 나은 것은 "analysis_type_name"대신 클래스 이름을 얻는 것입니다. 나는 정상적인 계급 체계가 가능한 한 많이 다루기를 바란다. –