例如我有这样的代码
class Product(models.Model):
...
@property
def review_count(self):
return Review.objects.filter(order__product_id=self.id, published=True).count
class Order(models.Model):
product = models.ForeignKey(Product)
class Review(models.Model):
order = models.ForeignKey(Order)
published = models.BooleanField(default=False)
而且我经常需要显示每个产品的评论数量。我找到了方法-
- 属性review_count - 看起来不错,但在 Product 对象集上它非常慢。
- 使用 .extra 方法进行注释 - 它更快,但需要额外的 SQL(我认为,我不能简单地使用注释,因为已发布 = True 对评论对象进行过滤)。
我认为,如果我在评论模型中使用 fk 附加字段“产品”,我将可以轻松快捷地获得一组产品,但在这种情况下,字段“产品”将依赖于字段“订单”,而不是我认为有利于标准化。
PS:一个订单可能很少有评论 - 没关系。以及与评论相关的订单,以检查一个订单没有太多评论 - 审核问题。
请帮帮我,我该如何改进这个方案,以便更快、更轻松地获得产品的评论次数