3

DUPLICATE: order_by()でDjangoカスタムモデルメソッドプロパティを使用する

私には2つのモデルがあります。1つは投稿を保存し、もう1つはForeignKeyフィールドを使用して関連するそれらの投稿に対する投票を保存します。ユーザーと投票が行われた日時を追跡する必要があるため、各投票は個別のレコードとして保存されます。

Django 1.1集計合計関数を使用して、すべての投票を集計するヘルパー関数を作成しました。

class Post(models.Model):
    ...some fields...

    def tally(self):
        return self.vote_set.all().aggregate(Sum('value'))['value__sum'] or 0

class Vote(models.Model):
    post = models.ForeignKey(Post)
    value = models.IntegerField()
    ...some fields...

私が行う必要のある1つのクエリorder_byは、集計の1つを実行する必要があります。でも:

Post.objects.all().order_by('tally')

次のテンプレートエラーが発生します。

レンダリング中に例外が発生しました:キーワード「tally」をフィールドに解決できません。選択肢は次のとおりです。date_created、description、id、is_active、name、related、slug、user、vote

order_by()関数に呼び出し可能オブジェクトを取得させる方法はありますか?

4

1 に答える 1

5

Annotateメソッドが解決策であることがわかりました。

Post.objects.all().annotate(vote_tally=Sum('vote__value')).order_by('-vote_tally')
于 2009-11-21T09:53:04.830 に答える