Human
およびAnimal
という名前の2つのモデルがあります。人間の主キーは、動物モデルの外部キーです。どちらもそれぞれ3列です。人間モデルには、c、e、r列があります。動物モデルには、l、i、p列があります。このように、HumanモデルでDjangoクエリを実行しています。
result = Human.objects.filter().order_by('r')
result
はクエリセットオブジェクトです。このオブジェクトはビューファイルからDjangoテンプレートページに送信されます。テンプレートページ内では、result
をループして列の値を表示しています。
次に、同じループ内のDjangoテンプレート内で、p
列(動物モデルに存在する)列の値もフェッチします。 Djangoテンプレートページでどのように実行できますか?.
pythonファイルで、私はこのようにすることができます
for i in result:
print i.animal_set.values()[0]['p']
しかし、私はテンプレートページでそれをしたいです。
{% for record in result %}
{{record.c}}, {{record.e}},
{% for animal in record.animal_set|slice:":1" %}
{{animal.p}}
{% endfor %}
{% endfor %}
まず、データベーススキーマに問題があるようです。 「c」、「e」、「r」などが列の実際の名前である場合は、名前を変更することを検討してください。次に、例のPython=コードで示したコードでは、IndexErrorsはキャッチされません。Humanオブジェクトに関連する最初のAnimalを取得したい場合は、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 %}
与えられた変数名は異なりますが、あなたの場合、コードをリファクタリングするのが良いでしょう。