我正在尝试创建一个模型方法,该方法从一个模型中的字段中获取数据,并使用另一模型中的字段中的数据执行简单的算术运算。我不是在views.py
中创建QuerySet,而是在models.py
中创建一个可以通过html上下文变量轻松访问的模型方法(例如obj.model.modelmethod)
以下是我的模型的非常简化的版本(在添加所需的模型方法之前):
class Person(models.Model):
'''
This table serves as the ultimate parent.
'''
id = models.IntegerField(auto_created=False, primary_key=True)
name = models.CharField(max_length=128, null=True, blank=True)
def __str__(self):
return self.name
class SalaryYearOne(models.Model):
id = models.OneToOneField(
Person,
on_delete=models.DO_NOTHING,
db_constraint=False,
primary_key=True
)
salary1 = models.IntegerField(null=True, blank=True)
class SalaryYearTwo(models.Model):
id = models.OneToOneField(
Person,
on_delete=models.DO_NOTHING,
db_constraint=False,
primary_key=True
)
salary2 = models.IntegerField(null=True, blank=True)
我要创建的模型方法将在SalaryYearOne
类下。目标是计算薪水百分比(每年的变化)(四舍五入到小数点后两位)。例如:
class SalaryYearOne(models.Model):
...
def salary_percent_change(self):
return round((self.salary1 - self.salary2) / self.salary2, 2)
上述内容更多是出于说明目的。我了解书面形式存在一些问题。例如,我了解SalaryYearOne
表中没有名为salary2
等的字段。但是,我希望这清楚地表明了我的意图。最后,为进一步了解背景,将从Person
中选择ListView
的实例,我希望能够通过salary_percent_change
在我的html中将DetailView
显示为上下文变量。
您如何建议我解决这个问题?