【问题标题】:Django models to have a shared calculated fieldDjango 模型具有共享计算字段
【发布时间】:2018-03-16 13:50:25
【问题描述】:

我有 3 个 Django 模型,它们共享一些共同属性,然后它们还有许多其他属性使它们不同。示例:

模型1

  • quality_score
  • Model1 特有的其他属性

模型2

  • quality_score
  • Model2 特有的其他属性

模型3

  • 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 个模型共享此属性,而不是在每个模型中创建它?

感谢您的帮助。

【问题讨论】:

    标签: python django


    【解决方案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
    

    Model1Model2 的所有实例都将具有 quality_scorequality_band 成员。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      相关资源
      最近更新 更多