2010-01-08 119 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