In meiner App habe ich 3 Modelle: Problem, Serie und Charakter. Das Issue-Modell hat einen Series ForeignKey und ein Character ManyToManyField. Hier sind sie vereinfacht:Django Vorlage für Schleife Iteration durch unterschiedliche Fremdschlüssel
class Character(models.Model):
name = models.CharField('Character name', max_length=200)
desc = models.TextField('Description', max_length=500)
class Series(models.Model):
name = models.CharField('Series name', max_length=200)
desc = models.TextField('Description', max_length=500)
class Issue(models.Model):
series = models.ForeignKey(Series, on_delete=models.CASCADE, blank=True)
name = models.CharField('Issue name', max_length=200)
number = models.PositiveSmallIntegerField('Issue number')
date = models.DateField('Cover date')
desc = models.TextField('Description', max_length=500)
characters = models.ManyToManyField(Character, blank=True)
cover = models.FilePathField('Cover file path', path="media/images/covers")
Ich habe eine Zeichenvorlage, die Informationen über das Zeichen anzeigt. Ich möchte auch Ausgaben anzeigen, in denen sich der Charakter befindet, sortiert nach Serien.
{% extends "app/base.html" %}
{% block page-title %}{{ character.name }}{% endblock page-title %}
{% block content %}
<div class="description">
<p>{{ character.desc }}</p>
</div>
<div class="issues">
<h3>Issues</h3>
{% for series in character.issue_set.all %}
<div>
<a href="{% url 'app:series' series.id %}">{{ series.name }}</a>
<ul>
{% for issue in character.issue_set.all %}
{% if issue.series.name == series.name %}
<li>
<a href="{% url 'app:issue' issue.id %}"><img src="/{{ issue.cover }}" alt = "{{ series.name }}" ></a>
<a href="{% url 'app:issue' issue.id %}"><p>Issue #{{ issue.number }}</p></a>
</li>
{% endif %}
{% endfor %}
</ul>
</div>
{% endfor %}
</div>
{% endblock content %}
Offensichtlich ist die Art und Weise dies derzeit formatiert ist, dass in dem Satz für jede Ausgabe, den Titel der Serie gibt, und dann jede Ausgabe in dem Satz.
<div class="issues">
<h3>Issues</h3>
<div>
<a href="/series/1">Series 1</a>
<ul>
<li>
<a href="/issue/1"><img src="/media/images/covers/01.jpg" alt="Series 1"></a>
<a href="/issue/1"><p>Issue #1</p></a>
</li>
<li>
<a href="/issue/2"><img src="/media/images/covers/02.jpg" alt="Series 1"></a>
<a href="/issue/2"><p>Issue #2</p></a>
</li>
</ul>
</div>
<div>
<a href="/series/1">Series 1</a>
<ul>
<li>
<a href="/issue/1"><img src="/media/images/covers/01.jpg" alt="Series 1"></a>
<a href="/issue/1"><p>Issue #1</p></a>
</li>
<li>
<a href="/issue/2"><img src="/media/images/covers/02.jpg" alt="Series 1"></a>
<a href="/issue/2"><p>Issue #2</p></a>
</li>
</ul>
</div>
</div>
Hier ist, was ich sehen möchte:
<div class="issues">
<h3>Issues</h3>
<div>
<a href="/series/1">Series 1</a>
<ul>
<li>
<a href="/issue/1"><img src="/media/images/covers/01.jpg" alt="Series 1"></a>
<a href="/issue/1"><p>Issue #1</p></a>
</li>
<li>
<a href="/issue/2"><img src="/media/images/covers/02.jpg" alt="Series 1"></a>
<a href="/issue/2"><p>Issue #2</p></a>
</li>
</ul>
</div>
</div>
ich ziemlich viel auf Templating recherchiert habe, und ich sehe keinen Weg, um eine Liste zu erhalten, basierend auf unterschiedlichen Werten. Ich habe auch versucht, ein neues Set in meinem Charakter- oder Issue-Modell zu erstellen, das ich verwenden könnte, um issue_set.all
zu ersetzen, aber ich muss es noch arbeiten lassen.
EDIT: Auf Anfrage von marcusshep wird die Zeichenansicht, die die allgemeine Detailview mit:
class CharacterView(generic.DetailView):
model = Character
template_name = 'app/character.html'
Kann ich Ihre Ansicht sehen, wo Sie das 'character' queryset an die Vorlage übergeben? – marcusshep
@marcusshep, aktualisiert mit dem Ansichtscode. –
Also, um klar zu sein, möchten Sie, dass Ihre Vorlage nur die Zeichen anzeigt, die einen eindeutigen Namen haben, richtig? – marcusshep