【发布时间】:2016-10-15 21:44:34
【问题描述】:
我有以下型号:
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,但没有广泛了解如何立即执行此操作。
我想我可以通过将与filter 相同的参数放入Count 对象中来接近它,但是当我输入它时我意识到它不起作用,即:
Team.objects.annotate(num_specifics=Count('award__award_type__in=Award.specific_choices'))
对此的任何帮助将不胜感激。
【问题讨论】:
标签: python django python-3.x django-queryset