Группировка набора запросов по значению столбца

#python #django #django-orm

#python #django #django-orm

Вопрос:

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

 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 . Под группировкой я подразумеваю получение, например, списка нескольких наборов запросов, которые содержат только задачи для single areaid . Есть ли возможность достичь этого с помощью django orm без зацикливания на наборе запросов, который у меня уже есть? Мне это нужно для отображения разных таблиц в jinja2, уникальной таблицы для каждой areaid .

Ответ №1:

Вы могли бы использовать набор запросов на Area с prefetch_related помощью.

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