将查询集传递给模板

时间:2014-07-30 17:55:38

标签: django orm

我有一个模板,列出了所有已创建的项目。我已使用models.Manager创建了一个查询集,该查询集计算特定tasks的{​​{1}}个数。我还在project中创建了两个变量,用于过滤结果以提供更具体的输出。在我的模板中,我希望能够显示views.pyProject X has 11 tasks open(以表格格式)。

应该注意的是,我可以使用Project Y has 5 tasks open访问TaskCount经理的结果,但我真正感兴趣的是访问{{ project.tasks }}变量我的模板。

open_set

models.py

class TaskCount(models.Manager): def get_query_set(self): return super(TaskCount, self).get_query_set().annotate(tasks=Count('task')) class Project(models.Model): # Model Fields # some fields # Model Managers with_tasks = TaskCount()

views.py

class ListProject(ListView): model = Project template_name = 'list_project.html' # Queries open_set = Project.with_tasks.filter(task__status=0) closed_set = Project.with_tasks.filter(task__status=1)

list_project.html

1 个答案:

答案 0 :(得分:1)

你不应该在课堂上放置那些查询:ListView不了解它们并且不会将它们传递到任何地方。相反,您应该覆盖get_context_data并从那里返回。

class ListProject(ListView):
    ...
    def get_context_data(self, *args, **kwargs):
        context = super(ListProject, self).get_context_data(*args, **kwargs)
        context['open_set'] = Project.with_tasks.filter(task__status=0)
        context['closed_set'] = Project.with_tasks.filter(task__status=1)
        return context