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

yeotifhr  于 2023-01-01  发布在  Python
关注(0)|答案(1)|浏览(136)

我尝试将所有decimalfield数字相加,以在模型中形成总和
这是我的模型

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,我认为唯一的方法是创建一个方法,但我已经尝试过了,它不会像预期的那样工作

rkkpypqq

rkkpypqq1#

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__'

这是你想要的吗?

相关问题