Python 将django中的两个字段相乘
我有两种不同的型号Python 将django中的两个字段相乘,python,django,django-models,Python,Django,Django Models,我有两种不同的型号 class Part(models.Model): partno = models.CharField(max_length=50) price = models.PositiveIntegerField(default= 0) tax = models.PositiveIntegerField(default= 0) created_date = models.DateField(auto_now_add=True) 我想将价格与采购
class Part(models.Model):
partno = models.CharField(max_length=50)
price = models.PositiveIntegerField(default= 0)
tax = models.PositiveIntegerField(default= 0)
created_date = models.DateField(auto_now_add=True)
我想将价格
与采购订单数量
的部分相乘,结果显示在金额
中。e、 g
金额=价格*采购订单数量
有人能帮我解决这个问题吗?既然
金额
完全取决于价格
和采购数量
,你最好使用一个属性。否则会引入数据复制。因此,您可以将其实现为:
class PurchaseOrder(models.Model):
part = models.ForeignKey(Part, on_delete=models.CASCADE)
po_quantity = models.PositiveIntegerField(default= 0)
supplier = models.ForeignKey(Supplier, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
created_date = models.DateField(auto_now_add=True)
@property
def amount(self):
return self.po_quantity * self.part.price
由于
金额
完全取决于价格
和采购订单数量
,因此最好为此使用属性。否则会引入数据复制。
class PurchaseOrder(models.Model):
part = models.ForeignKey(Part, on_delete=models.CASCADE)
po_quantity = models.PositiveIntegerField(default= 0)
supplier = models.ForeignKey(Supplier, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
created_date = models.DateField(auto_now_add=True)
@property
def amount(self):
return self.po_quantity * self.part.price
from django.db.models import F
class PurchaseOrderManager(models.Manager):
def get_queryset(self, *args, **kwargs):
return super().get_queryset(*args, **kwargs).annotate(
amount=F('po_quantity') * F('part__price')
)
class PurchaseOrder(models.Model):
part = models.ForeignKey(Part, on_delete=models.CASCADE)
po_quantity = models.PositiveIntegerField(default= 0)
supplier = models.ForeignKey(Supplier, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
created_date = models.DateField(auto_now_add=True)
objects = PurchaseOrderManager()