2011-04-20 27 views
0

嘿,讓我們說我有這樣的模式:Django的:排序與普通的列值查詢

class Log: 
msg = CharField(...) 
project = ForeignKey(..) 
date = DateField(..) 

現在讓我們假設我要選擇的4個最近的日誌:

logs = Log.objects.order_by('project').order_by('-date')[:4] 

此外,我想要提取共享相同項目的日誌,所以在我的模板中,我想要做類似:

{% for proj in projects %} 
    [Do something with the proj model instance] 
    {% for log in proj.logs(?) %} 
    [Do something with logs] 
    {% endfor %} 
{% endfor %} 

如何?

+0

問題的兩個部分如何鏈接在一起? – 2011-04-20 08:46:21

+0

你想選擇一些項目,然後遍歷這些項目中的日誌?只要有一個外鍵就是你需要做的......用於登錄proj.log_set – Chris 2011-04-20 08:50:30

回答

0

在您的模板中,你可以按項目regroup

從文檔的東西(未經測試)類似

{% regroup logs|dictsort:"project.id" by project as project_list %} 

{% for project in project_list %} 
    {{ project.grouper }} 
     {% for item in project.list %} 
      [Do something with logs] 
     {% endfor %} 
{% endfor %} 
0
{% for proj in projects %} 
    {{ proj.name }} 
    {% for log in proj.log_set.all %} 
    {{ log.msg }} 
    {% endfor %} 
{% endfor %} 

如果使用related_name您ForeignKey的(比方說,「日誌」),你可以,你可以使用 proj.logs而不是凸出。 log_set。檢查docs

如果您需要定期對項目的最新日誌,我會考慮寫一個方法,爲您的項目模型:

def recent_logs(self): 
    return self.log_set.all()[:4] 

然後,你可以調整你的模板循環:

{% for log in proj.recent_logs %} 
    {{ log.msg }} 
{% endfor %}