【发布时间】:2020-12-03 13:00:23
【问题描述】:
我有一个类似的模型
class tbl_payment(models.Model):
document_id = models.ForeignKey(tbl_invoice, on_delete=models.CASCADE)
client_id = models.ForeignKey(tbl_customer, on_delete=models.CASCADE)
total_amount = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
paid_amount = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
balance = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
date = models.DateField(blank=True, null=True)
status = models.CharField(max_length=50)
现在我想做的是每当添加新记录或现有记录发生更改时,balance 应该更新为 total_amount 和 paid_amount 之间的差异(简单数学),并基于我的 @ 987654325@ 栏目,我想将status 保存为Paid、Partial 或Unpaid。
我想避免在我的视图中计算balance,然后将其保存在数据库中,相反,我想将此部分移交给我的模型,以便我的模型处理balance,我可能会避免错误我下意识地害怕。
我才知道这是这样做的
class tbl_payment(models.Model):
document_id = models.ForeignKey(tbl_invoice, on_delete=models.CASCADE)
client_id = models.ForeignKey(tbl_customer, on_delete=models.CASCADE)
total_amount = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
paid_amount = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
balance = models.DecimalField(max_digits=8, decimal_places=2, blank=True, null=True)
date = models.DateField(blank=True, null=True)
status = models.CharField(max_length=50)
@property
def balance(self, value):
return self.total_amount - paid_amount
但是我应该通过什么来代替value??
当我尝试像这样获得due_amount 值时
tbl_bulk_payment.objects.get(pk=1).due_amount
它给due_amount() missing 1 required positional argument: 'value'
这样做的正确方法是什么??
【问题讨论】:
标签: django django-models orm