我想在 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:
选择`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` 来自`dpnk_team` 左外连接 `dpnk_userprofile` T4 ON (`dpnk_team`.`id` = T4.`team_id`) 左外连接 `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 错误?