通过另一个模型的方法为模型创造价值

时间:2019-02-28 13:23:31

标签: python django model

我正在尝试创建一个新表(Payslip model),该表将包含截止日期员工的计算工资。

我希望Payslip.salaryEmployee.compute_pay()获得价值 给定上面url链接中的示例,我的views.py应该是什么样?

这是进行此类处理的最佳方法吗?还是有任何可以帮助我在这里做什么的图书馆?

https://imgur.com/a/wVG5qrd

model.py

class Employee(models.Model):
    name = models.CharField(max_length=20)
    rate = models.IntegerField()
    absent = models.IntegerField()
    def __str__(self):    
        return self.name    
    def compute_pay(self):    
        daily = rate / 20    
        return rate - (daily*absent)  

class Payslip(models.Model):    
    name = models.CharField(max_length=20)  
    salary = models.IntegerField()    
    def __str__(self):
        return self.name

views.py

def compute(request):
    if request.method == "POST":  
        return render(request,'payroll/compute/compute.html')

1 个答案:

答案 0 :(得分:0)

我认为不需要其他模型的Payslip,而且两个模型之间都没有ForeignKey连接才能起作用。

考虑到您的要求,属性装饰器应该可以工作。阅读有关@property的工作原理。基本上,它充当伪模型字段,请记住,此字段的值未存储在数据库中的任何位置,但是它是针对此类情况(其中该字段根据其他字段进行更改并且需要读取)而量身定制的。

尝试一下

class Employee(models.Model):
    name = models.CharField(max_length=20)
    rate = models.IntegerField()
    absent = models.IntegerField()

    def __str__(self):    
        return self.name    

    @property
    def compute_pay(self):    
        daily = self.rate / 20    
        return (self.rate - (daily*self.absent))

您可以像其他任何模型字段一样,通过Employee.compute_pay来获取员工的工资