Я хотел бы использовать Bootstrap cards
, чтобы создать одну карту по объекту и добавить несколько субобъектов в каждый.
Например:
У меня есть объект Publication
, который может содержать один или несколько подобъектов Document
.
Объект публикации имеет некоторые атрибуты: category
, title
, picture
, description
и Объект документа имеет некоторые атрибуты, такие как title
, format
, language
, ...
Я бы хотел получить что-то вроде этого:

Для той же категории я создаю карточку по публикации и перечисляю все документы для каждой публикации.
Вот что я получу с моим кодом:

Как видите, у меня должно быть документ № 1 и документ № 2 на одной карточке, а не две разные карточки.
Это мой код:
{% for category in research_categories|dictsort:'name' %}
<div class="row">
<fieldset>
<legend id="category_{{ category.id }}"><span class="name">{{ category }}</span></legend>
</fieldset>
</div>
<div class="row">
<div class="col-sm-4">
{% for element in test_research %}
{% if element.publication.category|stringformat:"s" == category|stringformat:"s" %}
{% ifchanged %}
<div class="card" style="width:250px">
<img class="card-img-top" src="{{ element.publication.cover.url }}" alt="Card image">
<div class="card-body">
<h4 class="card-title">{{ element.publication }}</h4>
<table class="table table-condensed">
<tbody>
<tr>
<td> {{ element.title }}</td>
</tr>
</tbody>
</table>
</div>
</div>
{% endifchanged %}
{% endif %}
{% endfor %}
</div>
</div>
{% endfor %}
И мой взгляд по этой части:
# By default, display documents
test_research = Document.objects.all().order_by('publication__title', 'title', 'language', 'format')
research_categories = defaultdict(list)
for element in test_research:
research_categories[element.publication.category].append(element)
research_publications = defaultdict(list)
for element in test_research:
research_publications[element.publication].append(element)
kwargs['test_research'] = test_research
kwargs['research_categories'] = research_categories
kwargs['research_publications'] = research_publications