在单个视图中传递两个模型

时间:2018-03-17 12:08:37

标签: django django-models django-templates django-views

我试图在Django项目的单个视图中显示来自两个模型的信息。 我有2个模特:主要(父母),访问(儿童) 我想显示Main的详细信息视图(姓名,出生日期),然后显示访问列表。实际上,显示父表中的一条记录以及所有相关的子表。但子表只是部分显示(见图)。

另外,有人可以告诉我Django代码如何知道只渲染与父记录关联的子记录(外键过滤的时间/时间?)

Image showing the problem

例如:

Main.name

  • Visit.date - Visit.type
  • Visit.date - Visit.type
  • Visit.date - Visit.type

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>

1 个答案:

答案 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中那样单独将访问次数传递给模板 - 您应该完全删除该方法。