代码之家  ›  专栏  ›  技术社区  ›  harto

django:获取子对象上的父对象匹配条件

  •  1
  • harto  · 技术社区  · 15 年前

    我想不出一个更合适的问题标题,但我正在寻找一些关于如何实现以下要求的建议:

    我有一个 Project 类,可以包含 Task 物体。任务有一个受让人。在我的django模板中,我想为给定用户呈现项目和任务的“树”,只显示那些至少分配给用户一个任务的项目,并且在每个项目中,只显示分配给用户的那些任务。

    我最初的方法是首先找到至少有一个分配任务的项目:

    def list_assigned_tasks(request, assignee_id):
        projects = Project.objects.filter(task__assignee=assignee_id).distinct()
        # ...
    

    (不是最有效的方法,但我只处理少量的项目和任务。)

    然后我想我可以写一个方法 项目 仅检索分配给用户的任务:

    class Project(models.Model):
        # ...
        def assigned_tasks(self, assignee_id):
            return self.task_set.filter(assignee=assignee_id)
    

    或者类似的。

    但是,我不能直接从模板中调用该方法。所以,我的问题是:有更好的方法来实现这个目标吗?正在查找有关查询集和模板实现的建议。

    (我的另一个想法是在 list_assigned_tasks -这是一个有效的方法吗?)

    1 回复  |  直到 15 年前
        1
  •  3
  •   Wogan    15 年前

    要获取分配给用户的任务列表,我将沿着以下行执行一些操作:

    assignee = get_object_or_404(Person, pk=assignee_id)
    tasks = assignee.task_set.select_related('project').order_by('project')
    

    然后在模板中:

    {% regroup tasks by project as project_list %}
    {% for pgroup in project_list %}
        <h3>{{ pgroup.grouper }}</h3>
        <ul>
        {% for task in pgroup.list %}
           <li>{{ task }}</li>
        {% endfor %}
        </ul>
    {% endfor %}
    

    您可能需要为实现调整一些细节,但是您得到了我希望的想法。