における特定の選択肢の出現回数を数える:は、私は次のモデルを持っているモデル
class Team(models.Model):
# stuff
class Event(models.Model):
# stuff
class Award(models.Model):
award_type_choices = (
(1, "some string"), # a lot of these
(2, "some other str"),
)
award_type = models.CharField(choices=award_type_choices)
specific_choices = (
(1, "some string"), # etc
# only a few of these, but all of these can be found inside award_type_choices.
)
event = models.ForeignKey(Event)
recipients = models.ManyToManyField(Team)
私は回数Team
の数がspecific_choices
列の下に収まる賞を獲得した注釈を付ける/カウントしようとしています。私はこのコードのビットを通じて賞を受賞しているフィルタチームができます。
reversed_choices = dict((v, k) for k, v in Award.specific_choices)
Team.objects.filter(award__award_type__in=reversed_choices.values())
はしかし、私はこれらを数えるアプローチすべきかわかりません。私は少し前にCount
、F
、およびExpressionWrapper
を少し使ったことがありますが、バットからすぐにこれをどうやって行うのかを広く知っているわけではありません。
すなわち、私はCount
オブジェクトにfilter
と同じパラメータを投げることによって、それに近づくことができ考え出し、しかし、すぐに私はそれを入力として、私はそれが動作しません実現:
Team.objects.annotate(num_specifics=Count('award__award_type__in=Award.specific_choices'))
これですべてのヘルプを感謝されます。
申し訳ありませんが、私は十分に明確だったとは思いません。私は 'specific_choices'フィールドの一部である' Award'を何回持っているかをフィールドで各チームに「注釈を付ける」ことを考えています。さらに、 'specific_choices'は、' int、str'タプルを内部に持つシーケンスです。その上で 'all()'を呼び出すことはできません。 – Justin
それは単なるTeam.objects.annotate(num_specifics = c)です。ここで、cは上記の戻り値です。 – dmitryro
これは動作しません。 AFAIK、あなたは注釈の中にクエリーを置くことはできません。さらに、それがしているのは、どれだけ多くのチームが勝ったかではなく、それらの特定の賞を獲得したチーム数です。私は後者を探しています。あなたはDjangoのORMはあなたのspecific_choicesに遭遇する場合 – Justin