2010-01-08 109 views
1

匹配条件想不出更合适的问题称号的父对象,但是我正在寻找如何落实以下要求一些建议:Django的:让儿童

我有一个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 - 是一种有效的方法?)

回答

3

要获得分配给用户的任务列表,我会做一些沿着这些线路:

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 %} 

您可能需要调整您的实现的一些细节,但你的想法 我希望。

+0

啊,非常好。我不知道“重组” - 这看起来就像是这样,谢谢。 – harto 2010-01-08 03:34:56