Подтвердить что ты не робот

Доступ к объекту набора заданий в шаблоне django

У меня две модели, называемые 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']

Но я хочу сделать это на странице шаблона.

4b9b3361

Ответ 1

{% for record in result %}
    {{record.c}}, {{record.e}}, 
    {% for animal in record.animal_set|slice:":1" %}
        {{animal.p}}
    {% endfor %}
{% endfor %}

Ответ 2

Прежде всего, я хотел бы упомянуть, что что-то кажется неправильным в вашей схеме базы данных. Если "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 %}

Указанные имена переменных различны, но в вашем случае было бы полезно перефакторировать код.