Я пытаюсь создать метод модели, который берет данные из поля в одной модели и выполняет простую арифметику с использованием данных из поля в другой модели.Я не пытаюсь создать QuerySet в views.py
, скорее, я пытаюсь создать метод модели в 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
.
КакВы бы порекомендовали мне пойти по этому поводу?