【发布时间】:2018-11-24 16:40:30
【问题描述】:
我有两个模型,一个产品模型和一个评级模型。我想要完成的是,每次创建“评级”时,通过 API POST 到使用 DRF 创建的端点,我想计算和更新相关产品中的 average_rating 字段。
class Product(models.Model):
name = models.CharField(max_length=100)
...
average_rating = models.DecimalField(max_digits=3, decimal_places=2)
def __str__(self):
return self.name
class Rating(models.Model):
rating = models.IntegerField()
product = models.ForeignKey('Product', related_name='ratings')
def __str__(self):
return "{}".format(self.rating)
最好的方法是什么?我是否使用post_save(创建后?)信号?
【问题讨论】:
-
你可以使用
post_save,虽然评分数量不是很大,你也可以去掉average_rating字段,在查询Products的时候计算这个(所以@ 987654327@Products)。这更安全,因为例如,如果评级被删除或更新,那么平均值也需要重新计算。
标签: python django django-models django-rest-framework