我正在完成我的第一个Django项目(除了几个教程),并且一直在研究如何完成这个任务。为了简单起见,我将使用Excel类推来解释我要做的事情。我有7个按钮横跨第1行(顶级模型)。单击这些按钮中的任何一个,然后显示A列(侧模型)中的5个项的列表,其中第2-6行(BODY Model)中都有相应的项。在视图中,我可以通过TOP主键加载侧模型,但是无法知道如何连接主体模型,因为它依赖于侧模型。
视图
def details(request, pk):
top = TOP.objects.filter().order_by('-modified_date')
middle= MIDDLE.objects.filter(TOP_id__pk=pk)
body = BODY.objects.filter(??????????)
return render(request, 'details.html', {'top': top, 'middle': middle,
'body': body})模型
class TOP(models.Model):
title = models.CharField(max_length=200)
class MIDDLE(models.Model):
TOP= models.ForeignKey('mysite.TOP', related_name='middle')
title = models.CharField(max_length=200)
class BODY(models.Model):
TOP= models.ForeignKey('mysite.TOP', related_name='indicators')
MIDDLE= models.ForeignKey('mysite.MIDDLE', related_name='indicators')
title = models.CharField(max_length=200)模板
{% block content %}
<div>
<div class="TOP-container">
{% for tops in top %}
<div class="tops"><a href="{% url 'details' pk=tops.pk %}">{{ tops.title }}</a></div>
{% endfor %}
</div>
{% for middles in middle %}
<div class="middle-container">
<div class="middles">{{ middles.title }}</div>
{% for bodys in body %}
<div class="bodys">{{ body.title }}</div>
{% endfor %}
</div>
{% endfor %}
</div>
{% endblock %}发布于 2016-06-08 22:17:56
您需要使用外键相关名称访问中间和体对象。
如果我正确理解你的问题:
MIDDLE (SIDE)元素。BODY元素相关联的MIDDLE元素。要做到这一点,您需要:
TOP元素MIDDLE对象的外键遍历TOP对象因此,您的循环将如下所示:
{% for middle in selected_top.middle.all %}
<div class="middle-container">
<div class="middles">{{ middle.title }}</div>
{% for body in middle.indicators.all %}
<div class="bodys">{{ body.title }}</div>
{% endfor %}
</div>
{% endfor %}注意通过外键的related_name访问外键所使用的模板语法
<object>.<related_name>.all还有几个注意事项:
MIDDLE和TOPTOP对象传递给视图https://stackoverflow.com/questions/37713454
复制相似问题