使用来自两个不同模型的字段创建模型方法?

时间:2018-11-26 00:08:26

标签: django python-3.x django-models django-templates django-views

我正在尝试创建一个模型方法,该方法从一个模型中的字段中获取数据,并使用另一模型中的字段中的数据执行简单的算术运算。我不是在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显示为上下文变量。

您如何建议我解决这个问题?

0 个答案:

没有答案