django模型中自动计算的整数字段

t9aqgxwy  于 2023-06-25  发布在  Go
关注(0)|答案(1)|浏览(106)

我有这样的模型

class Product(models.Model):
    name = models.CharField(max_length=150)
    stock = models.IntegerField()
    cogs = models.IntegerField()
    def __str__(self):
        return f"{self.name}"

class Transaction(models.Model):
    customer = models.ForeignKey(User, on_delete=models.CASCADE)
    product = models.ManyToManyField(Product)
    purchase_date = models.DateField(auto_now_add=True)
    quantity = models.IntegerField()
    total = models.IntegerField(blank=True)

    def save(self, *args, **kwargs):
        self.total =  self.quantity * self.product.cogs
        super().save(self, *args, **kwargs)
    
    def __str__(self):
        return f"{self.customer}"

我的问题是如何使产品属性在这种情况下stock将动态计算时,有交易输入。交易中的每个输入都将扣除product.stock,即product.stock - transaction.quantity
我尝试自动计算产品。股票时,有输入的交易

0mkxixxg

0mkxixxg1#

你可以使用@property装饰器来创建一个计算字段,它将在你每次调用它时执行。Python中的属性和特性之间的区别在于属性只是对象的数据成员,而特性是像属性一样访问的方法,但在调用时实际上执行一些计算。

class BankAccount:
   def __init__(self, balance, interest_rate):
      self.balance = balance
      self.interest_rate = interest_rate

   @property
   def interest_earned(self):
      return self.balance * self.interest_rate

acct1 = BankAccount(1000, 0.05)
print(acct1.balance)
print(acct1.interest_earned)

输出:

1000
50.0

我相信这比每次在模型上添加、修改或保存任何更改时执行相同的计算要好得多。

相关问题