21

我有两个模型,分别命名为HumanAnimal。Human 的主键是 Animal 模型中的外键。两者各有 3 列。人体模型有 c、e、r 列。动物模型有 l、i、p 列。我正在对 Human 模型运行 django 查询,就像这样。

result = Human.objects.filter().order_by('r')

result是一个查询集对象。该对象从我的视图文件发送到 django 模板页面。在模板页面内部,我正在循环result并显示列值。

现在我想做的是,我还想p在 django 模板内的同一个循环中获取列的值(存在于 Animal 模型中)。我们如何在django模板页面中做到这一点。

在python文件中我可以这样做

for i in result:
    print i.animal_set.values()[0]['p']

但我想在模板页面中进行。

4

2 回答 2

28
{% for record in result %}
    {{record.c}}, {{record.e}}, 
    {% for animal in record.animal_set|slice:":1" %}
        {{animal.p}}
    {% endfor %}
{% endfor %}
于 2013-01-14T15:40:43.103 回答
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 %}

给出的变量名称是不同的,但在您的情况下,最好重新分解代码。

于 2013-01-14T15:47:12.027 回答