我无法理解在模板中检索数据的原则。我非常了解如何从壳牌中做到这一点。但我总是阻止如何使用基于类的视图来做到这一点。 我有一个简单的观点:
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')
答案 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 %}
希望它有所帮助!