ビューの 1 つでフィルタを使用する際に問題が発生しています。ブログ エントリ、ニュース記事、およびレビューを含むサイトを作成しています。レビューはそれらのいずれかにタグを付けることができるため、エントリと記事はレビューと一般的な関係にあります。私がやろうとしているのは、特定の日付より新しいレビューの評価の合計に基づいてエントリ/記事を並べ替えることです。
単純化されたモデルは次のとおりです。
class Entry(models.Model):
name = models.CharField(max_length=50)
reviews = generic.GenericRelation(Review)
class Article(models.Model):
name = models.CharField(max_length=50)
reviews = generic.GenericRelation(Review)
class Review(models.Model):
rating = models.IntegerField()
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
target = generic.GenericForeignKey('content_type', 'object_id')
timestamp = models.DateTimeField(auto_now_add=True)
そのため、合計を求める必要があるため、注釈と集計を使用してみましたが、2 つの問題に遭遇しました。最初のものは、明らかに一般的なリレーションと注釈がうまく連携しないということです: https://code.djangoproject.com/ticket/10461。2 つ目の問題は、レビューの一部 (この場合は timestamp__gte=datetime.now()) のみを合計することはできないと思います。私はこれを間違った方法でやっていますか?
私はまた、これを逆に行うことも考えました:
Review.filter(timestamp__gte=datetime.now(), target__in=something).aggregate(Sum('rating'))
しかし、これに基づいてレビューを並べ替えようとしているので、order_by を使用できるように Review.something から始める必要はありませんか?
ありがとう。