2017-10-05 44 views
0

我有3個Django模型共享一些共同的屬性,然後他們有很多其他屬性,使他們不同。例如:Django模型有一個共享的計算字段

型號1

  • quality_score
  • 其他特定於型號1

Model2的

  • quality_score
  • 屬性個
  • 具體爲MODEL2

Model3

  • quality_score
  • 其他屬性特定於Model3

其他屬性,我需要創建一個計算字段這樣的:

def _get_quality_band(self): 
     if self.quality_score is None: 
      return '' 
     elif self.quality_score > 0 and self.quality_score <= 10: 
      return 'bad' 
     elif self.quality_score > 10 and self.quality_score <= 19: 
      return 'average' 
     elif self.quality_score > 19 and self.quality_score <= 28: 
      return 'good' 
     else: 
      return '' 
quality_band = property(_get_quality_band) 

有沒有辦法讓3個模型共享這個屬性,而不是在每個模型中創建它?

欣賞幫助。

回答

1

你可以有一個抽象基類,然後從它繼承:

class BaseModel(models.Model): 
    quality_score = models.IntegerField() 

    @property 
    def quality_band(self): 
    # do something with self.quality_score 

    class Meta: 
    abtract = True 

class Model1(BaseModel): 
# Your specialized fields 

class Model2(BaseModel): 
# Your specialized fields 

Model1所有實例和Model2將有quality_scorequality_band成員。

相關問題