检索django模板上的数据

时间:2017-10-17 08:35:27

标签: django django-models

我无法理解在模板中检索数据的原则。我非常了解如何从壳牌中做到这一点。但我总是阻止如何使用基于类的视图来做到这一点。 我有一个简单的观点:

class ProjectDetailView(generic.DetailView, LoginRequiredMixin):
    #import pdb; pdb.set_trace()
    model = Project
    template_name = 'project_details.html'

因此,在我的模板中,我可以轻松地从模型项目中检索数据 {{project.name}}或{{project.team_id}}

但如果我想要在其他模型的项目详细数据中显示,我该怎么办呢? 假设我想显示所有团队成员的列表?

这是我的模特:

class Team(models.Model):
    team_name = models.CharField(max_length=100, default = '')
    team_hr_admin = models.ForeignKey(MyUser, blank=True, null=True)
    members = models.ManyToManyField(MyUser, related_name="members")

    def __str__(self):
        return self.team_name


class Project(models.Model):
    name = models.CharField(max_length=250)
    team_id = models.ForeignKey(Team, blank=True, null=True)
    project_hr_admin = models.ForeignKey('registration.MyUser', blank=True, null=True)
    candidat_answers = models.ManyToManyField('survey.response')

2 个答案:

答案 0 :(得分:1)

通常你不在模板中做查询;你在视图中做它们,无论是基于类还是基于函数的视图。

在这种特殊情况下,由于数据是通过关系链接的,因此您可以在模板中关注这些关系:

Team: {{ project.team_id.name }}
Members: 
{% for member in project.team_id.members.all %}
    {{ member.name }}
{% endfor %}

可以通过覆盖视图中的get_context_data方法将未以此方式链接的数据添加到上下文中。

答案 1 :(得分:0)

您应该在上下文中添加额外的数据,如下所示:

class ProjectDetailView(generic.DetailView, LoginRequiredMixin):
    model = Project
    template_name = 'project_details.html'

    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super(ProjectDetailView, self).get_context_data(**kwargs)
        # Add in a QuerySet of all the team members
        context['members'] = self.get_object().team_id.members.all()
        return context

然后,在您的模板中,您将能够像这样显示它们:

{% for member in members %}
    {{ member.name }}   # or any other attribute
{% endfor %}

希望它有所帮助!