0

たとえば、私はこのようなコードを持っています

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)

非常に頻繁に、すべての製品のレビュー数を表示する必要があります。私はそれを行う方法を見つけました-

  1. プロパティreview_count - 問題ないように見えますが、製品オブジェクトのセットでは非常に遅いです。
  2. .extra メソッドで注釈を付ける - 高速ですが、追加の SQL が必要です (publish=True によるレビュー オブジェクトのフィルタリングのため、単純に注釈を使用することはできません)。

私は、追加のフィールド 'product' を Product on Review モデルに追加すると、一連の製品を簡単かつ迅速に取得できると思いますが、この場合、フィールド 'product' はフィールド 'order' に依存します。正規化に適していると思います。

PS: 1 つの注文でレビューが少ない場合がありますが、問題ありません。また、1 つの注文にレビューが多すぎないことを確認するためのレビューに関連する注文 - モデレーションの問題。

製品のレビュー数をより迅速かつ簡単に取得するために、このスキームを改善する方法を教えてください

4

1 に答える 1