Фильтрация моей аннотации - PullRequest
1 голос
/ 14 февраля 2012

У меня есть этот кусок кода, который складывает все повреждения игроков в одной команде.

teams = Team.objects.annotate(team_count=Count('Team played for')).order_by('city')

У меня проблема, однако.В настоящее время он добавляет все травмы, но я хотел бы сосчитать только игроков, которые в настоящее время получили травмы, или, более конкретно ... где returned=False

Вот мои модели для более подробного контекста.

Команда models.py

class Team(models.Model):
    city = models.CharField(verbose_name='City', max_length=30, null=True, blank=True)
    team_name =  models.CharField(verbose_name='Team Name', max_length=30, null=True, blank=True)
    team_logo = models.ImageField(upload_to='images/', null=True, blank=True)
    team_affiliation = models.ForeignKey('self', null=True, blank=True)

    def __unicode__(self):
        return u'%s %s' % (self.city, self.team_name)

РЕДАКТИРОВАТЬ добавил игрока models.py

class Player(models.Model):
    first_name = models.CharField(verbose_name='First Name', max_length=30, null=True, blank=True)
    last_name = models.CharField(verbose_name='Last Name', max_length=30, null=True, blank=True)
    team = models.ForeignKey(Team, related_name='Team played for')
    position = models.ForeignKey(Position, related_name="Position")
    pob = models.CharField(verbose_name='Place of Birth', max_length=100, null=True, blank=True)
    dob = models.DateField()
    age =  models.IntegerField(null=True, blank=True)
    height = models.CharField(verbose_name='Height', max_length=10, null=True, blank=True)
    weight = models.CharField(verbose_name='Weight', max_length=10, null=True, blank=True)
    drafted_by = models.ForeignKey(Team, related_name='drafted by', null=True, blank=True)

    def __unicode__(self):
        return u'%s %s' % (self.first_name, self.last_name)

Травма models.py

class PlayerInjury(models.Model):
    player =  models.ForeignKey(Player)
    injury_type = models.ForeignKey(Injury)
    injury_date = models.DateField(verbose_name='Injured On', null=True, blank=True)
    description = models.CharField(verbose_name='Description', max_length=180, null=True, blank=True)
    status = models.ForeignKey(Status)
    projected_return = models.DateField(verbose_name='Projected Return Date', null=True, blank=True)
    hide = models.BooleanField(default=False)
    returned = models.BooleanField(default=False)
    timestamp = models.DateTimeField(auto_now_add=True)
    source = models.URLField(max_length=200, null=True, blank=True)
    source_label = models.CharField(null=True, blank=True, max_length=200)

    def __unicode__(self):
        return u'%s - %s' % (self.player, self.injury_type)

Можно ли отфильтровать аннотацию, чтобы она учитывала только травмированных игроков?

1 Ответ

2 голосов
/ 14 февраля 2012

Просто отфильтруйте перед вызовом аннотации: .filter(player__playerinjury__returned=False).annotate(...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...