[英]Multiply two fields in django
我有两种不同的型号
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 PurchaseOrder(models.Model):
part = models.ForeignKey(Part, on_delete=models.CASCADE)
po_quantity = models.PositiveIntegerField(default= 0)
amount = 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)
我想将 Part 的price
与po_quantity
,结果显示在amount
中。 例如
金额 = 价格 * po_quantity
有人可以帮我解决这个问题吗?
由于amount
完全取决于price
和po_quantity
,因此您最好为此使用属性。 否则你会引入数据重复。 因此,您可以将其实现为:
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
如果您需要在过滤时使用amount
,您可以使用.annotate(…)
[Django-doc]代替,并在Manager
中定义它:
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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.