Поле свойства модели Django вычисляется с помощью поля из другой дочерней модели
class BusinessFunction(models.Model):
name = models.CharField(max_length=200)
priority_rating = models.PositiveIntegerField(null=True, blank=True)
location = models.CharField(max_length=200)
network_service_related = models.CharField(max_length=200)
class Meta:
ordering = ['name']
def __str__(self):
return self.name
class CriticalImpact(models.Model):
businessfunction = models.ForeignKey(BusinessFunction, on_delete=models.CASCADE)
priority = models.PositiveSmallIntegerField(null=True, blank=True)
financial = models.PositiveSmallIntegerField(null=True, blank=True)
legal = models.PositiveSmallIntegerField(null=True, blank=True)
score = models.PositiveSmallIntegerField(null=True, blank=True)
percentage = models.PositiveIntegerField(null=True, blank=True)
class Meta:
ordering = ['businessfunction']
class TimeImpact(models.Model):
businessfunction = models.ForeignKey(BusinessFunction, on_delete=models.CASCADE)
impact_score_financial = models.DecimalField(max_digits=5, decimal_places=2, blank=True,
null=True)
impact_score_asset = models.DecimalField(max_digits=5, decimal_places=2,
blank=True, null=True)
final_score = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True)
class Meta:
ordering = ['businessfunction']
@property
def final_rating(self):
final_rating = (self.final_score + ????????)/2
return final_rating
У меня есть код, как показано выше, и я хотел бы добавить свойство итоговой оценки, используя вычисления из собственной таблицы (TimeImpact) поле final_score и поле из CriticalImpact поле т.е. процент. Проблема в том, как я могу получить поле percentage из таблицы CriticalImpact, которая является дочерней для таблицы бизнес-функций. Я искал раньше, но большинство ответов - это вычисляемое поле, исходящее из поля в собственной таблице и родительской таблице, а не из другой дочерней таблицы.
В настоящее время у вас нет связи, сделайте ForeignKey
в модели TimeImpact
, которая будет иметь связь Many-to-One с моделью CriticalImpact
, затем вы можете взять поле percentage
через цепочку, так:
class TimeImpact(models.Model):
businessfunction = models.ForeignKey(BusinessFunction, on_delete=models.CASCADE)
impact_score_financial = models.DecimalField(max_digits=5, decimal_places=2, blank=True,
null=True)
impact_score_asset = models.DecimalField(max_digits=5, decimal_places=2,
blank=True, null=True)
final_score = models.DecimalField(max_digits=5, decimal_places=2, blank=True, null=True)
critical_impact=models.ForeignKey(CriticalImpact,on_delete=models.CASCADE)
class Meta:
ordering = ['businessfunction']
@property
def final_rating(self):
final_rating = (self.final_score + self.critical_impact.percentage)/2
return final_rating