Django DetailView get_context_data

问题描述 投票:0回答:1

我是 Django 新手。有一个

html
页面(project_details)应显示项目的标题和任务。但它只显示项目的标题,而不显示任务。任务存在,问题是过滤器!

views.py错误就在这里

from .models import Project,Task
from django.views.generic import ListView, DetailView

class ProjectsList(ListView):
  template_name = 'projects_list.html'
  queryset= Project.objects.all()

class ProjectDetail(DetailView):
  model = Project
  template_name = 'projects_details.html'

  def get_context_data(self, **kwargs):
    context = super(ProjectDetail, self).get_context_data(**kwargs)
    ## the context is a list of the tasks of the Project##
    ##THIS IS THE ERROR##
    context['tasks'] = Task.object.filter(list=Project) <---->HERE ((work with Task.object.all() ))

    return context

模型.py

class Project(models.Model):
   title = models.CharField(max_length=30)
   slug = AutoSlugField(populate_from='title', editable=False, always_update=True)

class Task(models.Model):
  title = models.CharField(max_length=250)
  list = models.ForeignKey(Project)
  slug = AutoSlugField(populate_from='title', editable=False, always_update=True)

urls.py

from django.conf.urls import url
from .models import Project
from .views import  ProjectsList, ProjectDetail

urlpatterns = [
   url(r'^$', ProjectsList.as_view(), name='project_list'),
   url(r'(?P<slug>[\w-]+)/$',ProjectDetail.as_view() , name='project_details'),]

projects_details.html

{% extends './base.html' %}
{% block content %}

<div>
<a href={{ object.get_absolute_url }}>
<h4> {{object.title}} </h4>
</a>
<ul>
{% for task in tasks %} <----> NO OUTPUT <li>
<li> {{task}}</li>
{% endfor %}
</ul>
</div>
{% endblock content %}
django django-filter
1个回答
27
投票

Project
是模型类,所以做
(list=Project)
没有意义。

如果要访问详细视图中的

get_context_data
方法中的对象,可以使用
self.object
:

def get_context_data(self, **kwargs):
    context = super(ProjectDetail, self).get_context_data(**kwargs)
    context['tasks'] = Task.objects.filter(list=self.object)
    return context

但是,您实际上根本不必重写

get_context_data
方法。在模板中,您可以从项目向后跟踪关系来获取其任务:

{% for task in object.task_set.all %}
  <li>{{task}}</li>
{% endfor %}
© www.soinside.com 2019 - 2024. All rights reserved.