如何在Django中基于外键进行乘法

2024-06-18 13:10:47 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好,我在django有这两个模型,你们可以看到我重写了save()方法,因为我希望atributevalor_a_receber是基于一个基本乘法和一个foreignkey值 以下是我的源代码:

from django.db import models
from accounts.models import Vendedor


class Comissao(models.Model):
    porcentagem = models.FloatField()


    def __str__(self):
        return str(self.porcentagem)


class Venda(models.Model):
    vendedor = models.ForeignKey(Vendedor, on_delete=models.DO_NOTHING)
    comissao_venda = models.ForeignKey(Comissao, null=True, on_delete=models.DO_NOTHING)
    data_venda = models.DateField(auto_now_add=True)
    valor_venda = models.FloatField()
    descricao_venda = models.CharField(max_length=60)
    valor_a_receber = models.FloatField(blank=True, null=True)


    def save(self, *args, **kwargs):
        self.valor_a_receber = (self.comissao_venda * self.valor_venda)
        super().save(*args, **kwargs)


    def __str__(self):
        return str(self.vendedor)

感谢您的帮助


Tags: djangofromimportselftruemodelssavedef
1条回答
网友
1楼 · 发布于 2024-06-18 13:10:47

您应该与comissao_vendraporcentagem相乘:

self.valor_a_receber = self.comissao_venda.porcentagem * self.valor_venda

但是在save方法中实现这一点可能不是一个好主意。例如,当在QuerySet上执行^{} [Django-doc]时,可以规避这些问题。最好将valor_a_receber定义为属性

class Venda(models.Model):
    vendedor = models.ForeignKey(Vendedor, on_delete=models.DO_NOTHING)
    comissao_venda = models.ForeignKey(Comissao, null=True, on_delete=models.DO_NOTHING)
    data_venda = models.DateField(auto_now_add=True)
    valor_venda = models.FloatField()
    descricao_venda = models.CharField(max_length=60)

    # ↓ not a field
    @property
    def valor_a_receber(self):
        return self.comissao_venda.porcentagem * self.valor_venda

    # no override of save

相关问题 更多 >