如何在我的PurchaseOrder模型中自动填充字段:
class PurchasedOrder(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.IntegerField()
@property
def batch_cost(self):
return self.quantity * self.product.unit_price
def __str__(self):
return self.product.name
如果我将其定义为属性,则将无法使用该属性进行过滤和填充。我希望它是一个计算字段。
我尝试了以下操作,但没有用:
def calculate_batch_cost(self):
return self.quantity * self.product.unit_price
batch_cost = models.FloatField(default=calculate_batch_cost)
感谢您的帮助<3
答案 0 :(得分:1)
您可以在categoryAxis.keepSelection = true;
中.annotate(..)
[Django-doc],例如:
QuerySet
此查询集中的from django.db.models import F
PurchasedOrder.objects.annotate(
batch_cost=F('product__unit_price') * F('quantity')
).filter(
batch_cost__gt=100 # An example of filtering
)
将具有属性PurchasedOrder
,即产品的.batch_cost
,乘以unit_price
。
然后我们可以例如对该过滤器进行过滤。例如,在上面的查询中,我们将获得quantity
大于PurchasedOrder
的所有batch_cost
。
答案 1 :(得分:1)
如果需要在创建或更新对象时指定此字段并进行更改,则可以将其添加到保存功能内:
def save(self, *args, **kwargs):
self.batch_cost = self.calculate_batch_cost()
super(PurchasedOrder, self).save(*args, **kwargs)
当然,您需要在模型内部添加字段
batch_cost = models.FloatField()
然后,您仍然可以在代码中的其他地方使用calculate_batch_cost
函数。