21

と という名前の 2 つのモデルがHumanありAnimalます。Human の主キーは、Animal モデルの外部キーです。両方ともそれぞれ 3 つの列があります。人間モデルには c、e、r 列があります。動物モデルには、l、i、p 列があります。このように、Human モデルで django クエリを実行しています。

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

resultクエリセット オブジェクトです。このオブジェクトは、ビュー ファイルから django テンプレート ページに送信されます。テンプレートページ内resultで、列の値をループして表示しています。

今私がやりたいことは、pそのdjangoテンプレート内の同じループ内の列(動物モデルに存在する)の値も取得したいということです。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 に答える