Django: отображение модели и подсчет того, как часто ее использует другая модель - PullRequest
0 голосов
/ 07 февраля 2011

Я создаю список TODO, который классифицирует задачи по их статусу. IE: жду, сегодня, завтра, по расписанию. Мои модели выглядят примерно так:

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)
    notes = models.TextField(blank=True)
    completed = models.BooleanField()

Я хочу создать список навигации, который отображает все статусы (что просто), а также подсчет того, сколько задач назначено каждому (вот где я застрял).

Ожидание (1) Сегодня (3) Завтра (1) Запланировано (0)

Он должен иметь возможность создавать статус, даже если счетчик равен 0. Это навигационный список, и я хочу, чтобы пользователь мог видеть, где он может поставить задачу.

Status.objects.all()

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

1 Ответ

2 голосов
/ 07 февраля 2011

Функции агрегирования в Django могут сделать это довольно просто.

from django.db.models import Count
statuses = Status.objects.all().annotate(Count('task'))

Теперь каждый элемент в statuses имеет атрибут task__count, который представляет собой количество задач, связанных с этим статусом.

...