#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()