Я хочу создать QuerySet в Django, который ограничивает команды только теми, у которых более двух активных участников. У меня есть следующий класс UserProfile в моих моделях.py:
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» определено как логическое, «team_member_count» оценивается как целочисленное значение, поэтому я ожидаю, что оно будет проверено как целое число в дальнейшем.
Я использую базу данных MySQL и пробовал ее с Django 1.4.3 и 1.5.1.
Я что-то упустил и должен ли я написать запрос по-другому, или это ошибка Django?