Django:使用gte integer对带注释的值进行筛选,以将结果与SQL中的True进行比较
我想在Django中创建QuerySet,它将团队限制为只有两个以上活跃成员的团队。我的models.py中有以下UserProfile类:Django:使用gte integer对带注释的值进行筛选,以将结果与SQL中的True进行比较,django,django-queryset,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, ) te
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
选择“dpnk团队”。`id`、`dpnk团队`、`name`、`dpnk团队`、`subsidiary\u id`、`dpnk\u团队`、`coordinator\u id`、`dpnk\u团队`、`investment\u token`、,
SUM(`auth\u user`.`is\u active`)作为`team\u member\u count`
来自“dpnk_团队”
左外连接'dpnk\u userprofile'T4 ON('dpnk\u team`.'id`=T4.'team\u id`)
左外连接'auth\u user'(T4.'user\u id`='auth\u user`.'id`)
由“dpnk_团队”分组。“id”
具有SUM(`auth\u user`.`is\u active`)>=True
由“dpnk_团队”订购。“名称”ASC
也就是说,团队中只有1名活动成员(True的评估结果为1)。虽然“is_active”字段被定义为布尔值,“team_member_count”的计算结果为整数值,因此我希望进一步将其测试为整数
我正在使用MySQL数据库,并在Django 1.4.3和1.5.1中进行了尝试
我是否遗漏了什么,是否应该以不同的方式编写查询,或者这是Django的一个bug?据我所知,这是Django的一个bug。解决办法是:
(Team.objects.filter(users__user__is_active=True)
.annotate(team_member_count=Count('users'))
.filter(team_member_count__gte=1))