[英]Django Query using Foreign Key
我开始使用 django 中的查询,并尝试在 sql 中复制连接的结果。
我有两个模型代表父母(WaiverAdult)和孩子(WaiverMinor)。 我想返回查询集中的父项和子项,因此我可以将它们分组到一个格式化的模板中,如下所示:
John Dad
Tommy Son
Amber Daughter
Jen Jones
Stevie Jones
Mike Jones
楷模:
class WaiverAdult(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50, blank=True)
class WaiverMinor(models.Model):
first_name = models.CharField(max_length=50, blank=True)
last_name = models.CharField(max_length=50, blank=True)
parent = models.ForeignKey(WaiverAdult, on_delete=models.CASCADE)
看法:
class WaiverListView(ListView):
waiver_adults = WaiverAdult.objects.all().prefetch_related(
'waiverminor_set').order_by('created')
queryset = [adult.waiverminor_set.all() for adult in waiver_adults]
context_object_name = "waiver_list"
template_name = 'waiver/waiver_list.html'
模板示例概述我正在尝试的内容:
{% for adult in waiver_list %}
<tr>
<td>{{adult.last_name}}, {{adult.first_name}}</td>
</tr>
{% for child in waiver_list %}
<tr>
<td>{{child.last_name}}, {{child.first_name}}</td>
</tr>
{% endfor %}
{% endfor %}
编写此查询的正确方法是什么? 先感谢您。 我真的很感激指导。
如果您希望访问相关对象,最好的方法是预取它们,这样您就不会在每次要访问相关对象时再次访问数据库。 你可以这样做:
waiver_adults = WaiverAdult.objects.all().prefetch_related('waiverminor_set').order_by('created')
这将是您的视图的查询集,因此您可以在视图中编写:
queryset = waiver_adults
然后在模板中,您可以通过以下方式以您想要的方式循环:
{% for adult in waiver_list %}
<tr>
<td>{{adult.last_name}}, {{adult.first_name}}</td>
</tr>
{% for child in adult.waiverminor_set.all %}
<tr>
<td>{{child.last_name}}, {{child.first_name}}</td>
</tr>
{% endfor %}
{% endfor %}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.