У меня есть следующие модели:Подсчитать количество вхождений определенных вариантов в моделях
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'))
Любая помощь с этим будет оценена.
К сожалению, я не думаю, что было достаточно ясно. Я ищу, чтобы «комментировать» каждую команду с полем, в котором сколько раз у них есть «Премия», которая является частью поля «specific_choices». Кроме того, 'specific_choices' - это просто последовательность с корнями int, str' внутри. Не могу называть 'all()' на этом. – Justin
Тогда это просто Team.objects.annotate (num_specifics = c), где c - возвращаемое значение из вышеизложенного. – dmitryro
Это не работает; AFAIK, вы не можете поместить запрос в аннотацию. Кроме того, что это значит, так это то, что многие команды выиграли эти конкретные награды, а не то, сколько побеждало _each_. Я ищу последнего. – Justin