我有两个模型,名为Human
和Animal
。 Human的主键是Animal模型中的外键。两者各有3列。人体模型有c,e,r列。动物模型有l,i,p列。我在人体模型上运行django查询,就像这样。
result = Human.objects.filter().order_by('r')
result
是一个查询集对象。此对象从我的视图文件发送到django模板页面。在模板页面内部,我循环遍历result
并显示列值。
现在我想做的是,我想在同一个循环内,在django模板中获取p
列(存在于Animal模型中)的值。我们怎么能在django模板页面中做到这一点。
在python文件中,我可以这样做
for i in result:
print i.animal_set.values()[0]['p']
但我想在模板页面中这样做。
答案 0 :(得分:20)
{% for record in result %}
{{record.c}}, {{record.e}},
{% for animal in record.animal_set|slice:":1" %}
{{animal.p}}
{% endfor %}
{% endfor %}
答案 1 :(得分:4)
首先,我想提一下您的数据库架构似乎有些问题。如果“c”,“e”,“r”等是列的真实名称 - 请考虑重命名它们。其次,在您提供的示例Python代码中,未捕获IndexErrors。如果你想获得与Human对象相关的第一个Animal,最好在Human模型中创建一个getter方法:
def get_first_animal(self):
try:
return self.animal_set[0]
except IndexError:
return None
如果你需要从模板中显示所有动物,你可以尝试这样的事情:
{% for animal in human.animal_set.all %}
{{ animal }}
{% endfor %}
给出的变量名称是不同的,但在您的情况下,重新计算代码是很好的。