2012-10-29 34 views
1

我遇到了問題,我不知道正確的方式來解決它。Django顯示列表中的項目的其他信息

基本上,我的模式,稱爲任務:

class Task(models.Model): 
    #mto1: many task made of one template 
    template = models.ForeignKey(Template) 
    STATUS_CHOISE = (('PR', 'In process'), ('ST', 'Stopped'), ('FN', 'Finished'), ('DL', 'Deleted'),) 
    status = models.CharField(max_length=2, choices=STATUS_CHOISE, default='ST') 
    responses_required = models.IntegerField(default=0) 
    date_deadline = models.DateTimeField(auto_now=False, auto_now_add=False) 
    date_created = models.DateTimeField(auto_now_add=True, auto_now=False) 

它可以有幾個答案

class Response(models.Model): 
    #mto1: many Responses generated for one task 
    task = models.ForeignKey(Template) 
    STATUS_CHOISE = (('PR', 'Process'), ('FN', 'Finished')) 
    status = models.CharField(max_length=2, choices=STATUS_CHOISE, default='ST') 
    date_finished= models.DateTimeField(auto_now_add=False, auto_now=True) 
    date_created = models.DateTimeField(auto_now_add=True, auto_now=False) 
    ip_address=models.IPAddressField() 
現在

,我想顯示一個用戶的所有任務(其中來自從模板模型,這是完成)與關於答案的附加信息,這些答案是 - 答案給出的數量(因此哪個狀態= FN) - 總答案的數量(狀態FN或PR) - 也許一些額外的信息。

我這樣做

@login_required 
def TemplateList(request): 
    task_list = Task.objects.filter(user=request.user) 
    return render_to_response('task_list.html',{'task_list':task_list}, context_instance=RequestContext(request)) 

但這恰恰顯示出現在模型中的數據,那我來計算的價值?

到目前爲止我用CustomTag做了它,但它似乎不是一個乾淨的解決方案。我寧願在視圖中執行邏輯,然後僅將模板用於顯示結果。 但是:如何將此值添加到任務列表的每個項目?

我必須這樣做:Passing additional data to a template in Django所以從零開始創建對象(這需要模板中的一些邏輯,因爲我必須將列表中的值與對象相匹配)?或者有沒有更好的解決方案?

我想一般的看法,像list_detail.object_list 這樣

def TaskListDetail(request): 
return list_detail.object_list(
    request, 
    queryset = Task.objects.filter(user=request.user), 
    template_name = 'task_list.html', 
    template_object_name = 'task_list', 

) 

但首先,它不會顯示任何東西(而其它視圖顯示的數據),第二我不知道怎麼加額外的數據以一種方式與列表中的項目匹配。

有什麼建議嗎?

+1

看一看這個問題:http://stackoverflow.com/questions/1483424/newbie-django-adding-calculated- results-to-queryset-before-passing-to-templat –

+0

看起來不錯,但這不允許我傳遞參數。所以如果我想要計算smt狀態='PR'和另一個狀態='ST'我必須做2個屬性函數。 – EsseTi

+0

另一件事。我何時需要添加@property註釋以及爲什麼我不? – EsseTi

回答

1

您可以在模型中添加一個方法。

class Task(models.Model): 
    #mto1: many task made of one template 
    template = models.ForeignKey(Template) 
    STATUS_CHOISE = (('PR', 'In process'), ('ST', 'Stopped'), ('FN', 'Finished'), ('DL', 'Deleted'),) 
    status = models.CharField(max_length=2, choices=STATUS_CHOISE, default='ST') 
    responses_required = models.IntegerField(default=0) 
    date_deadline = models.DateTimeField(auto_now=False, auto_now_add=False) 
    date_created = models.DateTimeField(auto_now_add=True, auto_now=False) 

    def do_some_calculation(self): 
     #make funny things 
     return "foo" 

在你的模板,你可以訪問此:

{% for taks in task_list %} 
    {{ task.do_some_calculation }} 
{% endfor %} 
+0

好的,這幾乎是Ngure所回答的。 有一個問題,我應該何時使用@property,何時不使用? – EsseTi

相關問題