Ответ 1
{% for record in result %}
{{record.c}}, {{record.e}},
{% for animal in record.animal_set|slice:":1" %}
{{animal.p}}
{% endfor %}
{% endfor %}
У меня две модели, называемые Human
и Animal
. Первичный ключ человека - это внешний ключ в модели Animal. Оба имеют по 3 столбца каждый. Модель человека имеет столбцы c, e, r. Модель животных имеет l, i, p столбцов. Я запускаю django-запрос в Human-модели, например.
result = Human.objects.filter().order_by('r')
result
- объект запроса. Этот объект отправляется из моего файла просмотра на страницу шаблона django. Внутри страницы шаблона я перехожу через result
и отображаю значения столбца.
Теперь, что я хочу сделать, я хочу также получить значение столбца p
(которое присутствует в модели Animal) внутри того же цикла внутри шаблона django. Как мы можем сделать это на странице шаблона 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 не пойманы. Если вы хотите получить первое Animal, связанное с объектом Human, было бы неплохо создать метод геттера в модели Human:
def get_first_animal(self):
try:
return self.animal_set[0]
except IndexError:
return None
Если вам нужно показать всех животных из шаблона, вы можете попробовать что-то вроде этого:
{% for animal in human.animal_set.all %}
{{ animal }}
{% endfor %}
Указанные имена переменных различны, но в вашем случае было бы полезно перефакторировать код.