У меня есть две модели:
class Status(models.Model):
title = models.CharField(max_length=32)
class Task(models.Model):
user = models.ForeignKey(User)
status = models.ForeignKey(Status, default=1)
title = models.CharField(max_length=128)
Я хочу создать список навигации, который содержит все статусы, которые есть в моей модели состояния, например: Сегодня, Завтра, Ожидание, Запланировано, Корзина
Достаточно просто.Затем я хочу отобразить количество задач, назначенных каждому статусу, благодаря SO, также простое:
Status.objects.all().annotate(Count('task'))
Это приятно создает список всех моих статусов и число, количество задач, назначенных каждому:
Сегодня (1) Завтра (1) Ожидание (0) Запланировано (2) Корзина (7)
Теперь хитрость в том, как фильтроватьвышеуказанные значения, чтобы они отражали только текущий вошедший в систему пользователь.Добавление фильтра в набор запросов, по-видимому, удаляет любые нулевые состояния, что имеет смысл.Я хочу эти нулевые статусы, хотя.Моя текущая идея включает Q()
:
Status.objects.filter(Q(task__user=1) | Q(task__user__isnull=True)).annotate(Count('task'))
Это не работает.
Есть идеи?
Редактировать для Yuji
Status.objects.all().annotate(Count('task'))
Дает:
Входящие (3) Сегодня (0) Следующие (1) Ожидание (0) Запланировано (1) Позднее (0) Когда-нибудь (0) Архив (0) Корзина (0)
Отлично, но 1 из этих задач входящих и запланированных для другого пользователя.Итак, давайте попробуем выполнить фильтрацию.
Status.objects.filter(task__user=current_user).annotate(Count('task'))
Входящие (2) Далее (1)
Работает!Сорта .... Мои (как я их назвал) статусы с нулевым нулем отсутствуют.Я должен сказать, что любой статус, с которым не связана задача, связанная с тем, что в данный момент вошел в систему, не отображается.Я хочу, чтобы он появился.