Не могу придумать более подходящее название вопроса, но я ищу несколько советов о том, как реализовать следующее требование:
У меня есть класс Project
, который может содержать Task
объектов. Задачи имеют цессионария. В моем шаблоне Django я хотел бы отобразить «дерево» проектов и задач для данного пользователя, показывая только те проекты, у которых есть хотя бы одна задача, назначенная пользователю, а в каждом проекте - только те задачи, которые назначены для этого пользователя. пользователь.
Мой первоначальный подход состоял в том, чтобы сначала найти проекты с хотя бы одной назначенной задачей:
def list_assigned_tasks(request, assignee_id):
projects = Project.objects.filter(task__assignee=assignee_id).distinct()
# ...
(Не самый эффективный подход, но я имею дело только с небольшим количеством проектов и задач.)
Тогда я подумал, что мог бы написать метод на Project
для извлечения только тех задач, которые назначены пользователю:
class Project(models.Model):
# ...
def assigned_tasks(self, assignee_id):
return self.task_set.filter(assignee=assignee_id)
или что-то в этом роде.
Однако я бы не смог вызвать этот метод напрямую из шаблона. Итак, мой вопрос: есть ли лучший способ добиться этого? Нужны советы по QuerySet и реализации шаблона.
(Моя другая мысль состояла в том, чтобы просто прикрепить назначенные задачи к каждому экземпляру проекта в list_assigned_tasks
- это правильный подход?)