Найти - Пользователи
Полная версия: использование вложенных циклов в шаблонах django
Начало » Django » использование вложенных циклов в шаблонах django
1
Dr.Livsi
Не пойму почему у меня при использовании вложенных циклов выпадает ошибка:
Caught DatabaseError while rendering: more than one row returned by a subquery used as an expression

{% if list1 %}
{% for ls1 in list1 %}

{% if list2%}
{% for ls2 in list2 %}
действие
{% endfor %}
{% endif %}

{% endfor %}
{% endif %}
alexzander77
а там где “действие” нет обращения к модели ?
Imposeren
Да, нужны детали. Скорее всего? вы там обращаетесь к полю модели у которого может быть несколько записей, и делаете get.

Примеры: many-to-one, Many-to-many
Если нужен один объект, то делайте “.get.0”
Dr.Livsi
смысл таков:
есть 2 модели, модельА и модельБ (foreign key на модельА). На странице должны отобразиться список данных из моделиА со вложенными списками моделиБ (вложенный список содержит только те элементы моделиБ, которые относятся к данному элементу модели А).
Там, где “действие”:
{% ifequal ls2.foreignkey_id ls1.id %}
{{ ls2.data1 }}, {{ ls2.data2 }}
{% endifequal %}
alexzander77
а ls1.ls2_set() в шаблоне не работает разве?

или Вы передаете в шаблон не модели, а уже полученные данные в словарях ? Судя по ошибке передаете именно шо модели.
Какой тип внешнего ключа?
Не может ли ссылатся он на несколько записей в первой модели?


вот эти два куска делают одно и то же, но второй, имхо, правильнее
 {% for ls1 in v %}
<br>{{ ls1.sname }}
{% for ls2 in ph %}
{% ifequal ls2.sname_id ls1.sname %}
{{ ls2.phase }}
{% endifequal %}
{% endfor %}
{% endfor %}
    {% for ls1 in v %}
<br>{{ ls1.sname }}
{% for ls2 in ls1.phase_set.all %}
{{ ls2.phase }}
{% endfor %}
{% endfor %}
Dr.Livsi
Попробовал, второй вариант. Работает. Спасибо!
Я, правда, уже решил задачу немного по-другому: разработав собственный тег включения.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB