たとえば、私はこのようなコードを持っています
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 - 問題ないように見えますが、製品オブジェクトのセットでは非常に遅いです。
- .extra メソッドで注釈を付ける - 高速ですが、追加の SQL が必要です (publish=True によるレビュー オブジェクトのフィルタリングのため、単純に注釈を使用することはできません)。
私は、追加のフィールド 'product' を Product on Review モデルに追加すると、一連の製品を簡単かつ迅速に取得できると思いますが、この場合、フィールド 'product' はフィールド 'order' に依存します。正規化に適していると思います。
PS: 1 つの注文でレビューが少ない場合がありますが、問題ありません。また、1 つの注文にレビューが多すぎないことを確認するためのレビューに関連する注文 - モデレーションの問題。
製品のレビュー数をより迅速かつ簡単に取得するために、このスキームを改善する方法を教えてください