【问题标题】:create value to a model from another model's method从另一个模型的方法为模型创造价值
【发布时间】:2019-03-01 01:18:31
【问题描述】:

我正在尝试创建一个新表 (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')

【问题讨论】:

  • 非常感谢您可以在这里复制粘贴代码而不是图片。
  • 嗨 Faruk,我更新了帖子。谢谢你。您仍然可以查看照片以了解页面的外观..

标签: python django model


【解决方案1】:

我认为不需要另一个模型 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 获取员工的工资

【讨论】:

  • 感谢 Paritosh 为我指明了正确的方向。会听从你的建议。谢谢!!!
  • 嗨,Paritosh,我有一个想法,我把函数放在我的视图中,如果我的工资单中有大量计算,可以把函数放在这里吗?顺便说一句,这样做的主要目的是存档工资单,所以我意识到我不能接受你的建议。 imgur.com/a/rWg7c7I 上面的这个链接对我有用,但我不知道如何迭代 Employee 模型以对所有员工执行此操作?
猜你喜欢
  • 2015-05-22
  • 2020-06-15
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多