Форум сайта python.su
Не пойму почему у меня при использовании вложенных циклов выпадает ошибка:
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 %}
Офлайн
а там где “действие” нет обращения к модели ?
Офлайн
Да, нужны детали. Скорее всего? вы там обращаетесь к полю модели у которого может быть несколько записей, и делаете get.
Примеры: many-to-one, Many-to-many
Если нужен один объект, то делайте “.get.0”
Офлайн
смысл таков:
есть 2 модели, модельА и модельБ (foreign key на модельА). На странице должны отобразиться список данных из моделиА со вложенными списками моделиБ (вложенный список содержит только те элементы моделиБ, которые относятся к данному элементу модели А).
Там, где “действие”:
{% ifequal ls2.foreignkey_id ls1.id %}
{{ ls2.data1 }}, {{ ls2.data2 }}
{% endifequal %}
Отредактировано (Март 6, 2012 14:45:34)
Офлайн
а 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 %}
Отредактировано (Март 6, 2012 17:51:58)
Офлайн
Попробовал, второй вариант. Работает. Спасибо!
Я, правда, уже решил задачу немного по-другому: разработав собственный тег включения.
Офлайн