Helpers - компьютеры, интернет, программирование

Django: фильтрация по аннотированному значению с целочисленными результатами gte по сравнению с True в SQL

Я хочу создать 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?

07.04.2013

Ответы:


1

Насколько я могу судить, это это ошибка в django. Обходной путь:

 (Team.objects.filter(users__user__is_active=True)
              .annotate(team_member_count=Count('users'))
              .filter(team_member_count__gte=1))
07.04.2013
Новые материалы

Интуитивное понимание тензоров в машинном обучении
Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

Почему объяснимость так важна прямо сейчас?
По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

Анимированный математический анализ
Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

Создание простого слайдера изображений с помощью JavaScript
Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

Создание базы данных с помощью супергероя «Python»
В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

ИИ для чайников: руководство для начинающих по пониманию будущего технологий
Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..