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

How to do a multiplication based on a ForeignKey in django

大家好,我在 Django 中有这 2 个模型,您是否看到我重写了 save() 方法,因为我希望属性 valor_a_receber 基于外键值的基本乘法 这是我的源代码:

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)

感谢任何帮助!

你应该乘以 comissao_vendraporcentagem:

self.valor_a_receber = self.comissao_venda<b>.porcentagem</b> * self.valor_venda

但在 save 方法中实现它可能 不是 一个好主意。这些可以被规避,例如在 QuerySet 上执行 .update(…) [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