Группировка запроса по значению столбца - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть набор запросов, который возвращает задачи по идентификатору клиента из следующих моделей и хотел бы получить еще несколько фильтров для получения более точных данных.Модели являются лишь примером структуры того, чего я пытаюсь достичь:

class Client(models.Model):
    name = models.CharField(max_length=255)
    def __str__(self):
        return self.name
class Office(models.Model):
    name = models.CharField(max_length=255)
    clientid = models.ForeignKey(Client, db_constraint=False, db_index=False, on_delete=models.DO_NOTHING)
    def __str__(self):
        return self.name
class Area(models.Model):
    name = models.CharField(max_length=255)
    officeid = models.ForeignKey(Office, db_constraint=False, db_index=False, on_delete=models.DO_NOTHING)
    def __str__(self):
        return self.name
class Task(models.Model):
    name = models.CharField(max_length=255)
    areaid = models.ForeignKey(Area, db_constraint=False, db_index=False, on_delete=models.DO_NOTHING)

Используемый мной запрос: Task.objects.filter(areaid__officeid__clientid='1') Он возвращает длинный набор запросов, который мне нужно сгруппировать по areaid.Под группировкой я подразумеваю получение, например, списка из нескольких наборов запросов, которые содержат только задачи для одного areaid.Есть ли возможность добиться этого с помощью django orm, не просматривая набор запросов, который у меня уже есть?Мне нужно это для рендеринга разных таблиц в jinja2, уникальная таблица для каждого areaid.

1 Ответ

1 голос
/ 24 апреля 2019

Вы можете использовать QuerySet на Area с prefetch_related.

areas = Area.objects.prefetch_related('task_set')
for area in areas:
    area_tasks = area.task_set.all()
...