Django 3.2如何在模型中添加模型的十进制字段



我试图将所有的decimalfields数字加在一起,形成模型内的总和

这是我的模型

class Ataskaita(models.Model):
class Meta:
verbose_name_plural = 'Ataskaitos'
bendrija = models.ForeignKey(Bendrija, on_delete=models.CASCADE,
related_name="ataskaita")
atlyginimas = models.DecimalField(max_digits=10, decimal_places=2, null=False, default=0)
sodra = models.DecimalField(max_digits=10, decimal_places=2, null=False, default=0)
vmi = models.DecimalField(max_digits=10, decimal_places=2, null=False, default=0)
pvm_saskaitos_kvitas = models.DecimalField(max_digits=10, decimal_places=2, null=False, default=0)
bankines_operacijos = models.DecimalField(max_digits=10, decimal_places=2, null=False, default=0)

sum = models.DecimalField(max_digits=10, decimal_places=2)

,我想把所有字段(atlyginimas, sodra, vmi, pvm_saskaitos_kvitas, bankines_operacijos)加在一起,这样我就有了它们的总和

我环顾了一下stackoverflow,我认为唯一的方法是创建一个方法,但我已经尝试过了,它不会像预期的那样工作

Django模型只是python类,所以像这样添加任意方法应该可以正常工作:

class Ataskaita(models.Model):
class Meta:
verbose_name_plural = 'Ataskaitos'
bendrija = models.ForeignKey(Bendrija, on_delete=models.CASCADE,
related_name="ataskaita")
atlyginimas = models.DecimalField(max_digits=10, decimal_places=2, null=False, default=0)
sodra = models.DecimalField(max_digits=10, decimal_places=2, null=False, default=0)
vmi = models.DecimalField(max_digits=10, decimal_places=2, null=False, default=0)
pvm_saskaitos_kvitas = models.DecimalField(max_digits=10, decimal_places=2, null=False, default=0)
bankines_operacijos = models.DecimalField(max_digits=10, decimal_places=2, null=False, default=0)
@property
def sum(self):
return sum([self.atlyginimas, self.sodra, self.vmi, self.pvm_saskaitos_kvitas, self.bankines_operacijos])

你可以像这样指示你的序列化器显示只读属性:

class Ataskaita(serializers.ModelSerializer):
sum = serializers.ReadOnlyField()
class Meta:
model = Ataskaita
fields = '__all__'

这样做符合你的要求吗?

最新更新