Django:使用gte整数结果对带注释的值进行过滤,以与SQL中的True进行比较

时间:2013-04-07 20:45:11

标签: django django-queryset

我想在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)

问题是,它导致SQL查询,其中是True而不是值2:

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”字段被定义为boolean,但“team_member_count”的计算结果为整数值,因此我希望它可以进一步测试为整数。

我正在使用MySQL数据库并尝试使用Django 1.4.3和1.5.1。

我错过了什么,我应该以不同的方式编写查询,还是这是一个Django错误?

1 个答案:

答案 0 :(得分:1)

据我所知, django中的一个错误。解决方法是:

 (Team.objects.filter(users__user__is_active=True)
              .annotate(team_member_count=Count('users'))
              .filter(team_member_count__gte=1))