0

チームを 2 人以上のアクティブなメンバーを持つチームのみに制限する Django で QuerySet を作成したいと考えています。models.py に次の UserProfile クラスがあります。

class UserProfile(models.Model):
  user = models.OneToOneField(
      User,
      related_name='userprofile',
      unique=True,
      null=False,
      blank=False,
      )
   team = models.ForeignKey(
      Team,
      related_name='users',
      verbose_name=_(u"Tým"),
      null=False, blank=False)
...

クエリは次のとおりです。

Team.annotate(team_member_count=Sum('users__user__is_active')).filter(team_member_count__gte = 2)

問題は、値が 2 ではなく True である SQL クエリになることです。

SELECT `dpnk_team`.`id`, `dpnk_team`.`name`, `dpnk_team`.`subsidiary_id`, `dpnk_team`.`coordinator_id`, `dpnk_team`.`invitation_token`,
SUM(`auth_user`.`is_active`) AS `team_member_count`
FROM `dpnk_team`
LEFT OUTER JOIN `dpnk_userprofile` T4 ON (`dpnk_team`.`id` = T4.`team_id`)
LEFT OUTER JOIN `auth_user` ON (T4.`user_id` = `auth_user`.`id`)
GROUP BY `dpnk_team`.`id`
HAVING SUM(`auth_user`.`is_active`) >= True
ORDER BY `dpnk_team`.`name` ASC

これは、アクティブなメンバーが 1 人しかいないチームにも与えています (True は 1 と評価されます)。「is_active」フィールドはブール値として定義されていますが、「team_member_count」は整数値に評価されるため、さらに整数としてテストされることを期待しています。

私は MySQL データベースを使用しており、Django 1.4.3 および 1.5.1 で試しました。

何か不足していますか?クエリを別の方法で記述する必要がありますか?それとも Django のバグですか?

4

1 に答える 1