我试图在Django项目的单个视图中显示来自两个模型的信息。 我有2个模特:主要(父母),访问(儿童) 我想显示Main的详细信息视图(姓名,出生日期),然后显示访问列表。实际上,显示父表中的一条记录以及所有相关的子表。但子表只是部分显示(见图)。
另外,有人可以告诉我Django代码如何知道只渲染与父记录关联的子记录(外键过滤的时间/时间?)
例如:
Main.name
views.py
class MainDetailView(generic.DetailView):
model = Main
template_name = "myapp/main-detail.html"
def get_context_data(self, **kwargs):
context = super(MainDetailView, self).get_context_data(**kwargs)
context['visit'] = Visit.objects.all()
# And so on for more models
return context
models.py
class Visit(models.Model):
fk_visit_patient = models.ForeignKey(Main, on_delete=models.CASCADE,
verbose_name=('Patient Name'))
visit_date = models.DateField()
visit_label = models.CharField(max_length=256, blank=True, null=True)
visit_specialty_list = (
(str(1), 'General Practice'),
(str(2), 'Internal Medicine'),
(str(3), 'Surgery'),
visit_specialty = models.CharField(
max_length=256,
choices=visit_specialty_list,
default=1, )
def __str__(self):
return str(self.visit_label)
def get_absolute_url(self):
return reverse('myapp:main-detail', kwargs={'pk': self.pk})
template.html
<div class="container-fluid">
<div class="row">
<div class="col-sm-12 col-md-7">
<div class="'panel panel-default">
<div class="panel-body">
<h1>{{ main.name }}</h1>
<p><strong>Date of Birth:</strong> <a href="">{{ main.date_of_birth }}</a></p>
<div style="margin-left:20px;margin-top:20px">
<h4>Visits</h4>
{% for visit in main.visit_set.all %}
<li><a href="#">{{ Visit.visit_date }} - {{ Visit.visit_specialty }}</a></li>
{% endfor %}
</div>
</div>
</div>
</div>
</div>
</div>
答案 0 :(得分:1)
你循环将变量定义为visit
,但你在里面引用Visit
。你需要保持一致。
{% for visit in main.visit_set.all %}
<li><a href="#">{{ visit.visit_date }} - {{ visit.visit_specialty }}</a></li>
{% endfor %}
请注意,您无需像在get_context_data
中那样单独将访问次数传递给模板 - 您应该完全删除该方法。