Ich mache eine Datenbank veröffentlicht Musikalbendjango erhalten Liste von verschiedenen ‚Kinder‘ von ForeignKey bezogenen Modell (und tun dies in Vorlage?)
models.py
class Image(models.Model):
image = models.ImageField(....
class Album(models.Model):
title = models.CharField(....
class Release(models.Model):
album = models.ForeignKey(Album)
cover_art = models.ForeignKey(Image, blank=True, null=True, on_delete=models.SET_NULL)
In meiner Vorlage (im Moment ist ich mit generic views) ich habe:
{% for a in album_list %}
{% for r in a.release_set.all %}
{% if r.cover_art %}
# display cover art image
{% endif %}
{% endfor %}
{% endfor %}
Das Problem ist, dass manchmal ein Album mehrmals mit identischem Cover freigegeben wurde, wobei in diesem Fall ich mag würde das Bild anzuzeigen, nur einmal, wi einen Text, der die Veröffentlichungen auflistet, auf die es sich bezieht.
Ich habe versucht:
{% for i in a.release_set.cover_art %}
{% for i in a.release_set.cover_art_set %}
{% for i in a.release_set.all.cover_art %}
{% for i in a.release_set.all.cover_art_set %}
Oder in einem einfacheren Fall, würde ich zumindest wie die Bilder kleiner anzuzeigen, wenn es mehr als eine von ihnen ist.
Ist es möglich, eine Liste von verwandten Objekten zu erhalten, indem Sie diese ForeignKey-Abfrage umkehren und dann nach dem Satz ihrer Kinder fragen? Der einzige Weg, den ich mir vorstellen kann, besteht darin, einige Tupel/Listen in der Ansicht zusammenzustellen.
Ah, natürlich, das ist mir irgendwie entfallen :) Gute Lösung. –
Große Antwort ... Gute Idee, aber ich habe ein Problem mit meiner Implementierung. Meine 'ForeginKey'-Beziehung bezieht sich auf ein anderes Modell in einer anderen App. Ich dachte, das würde immer noch funktionieren, indem ich einfach dieses Modell importiere, aber es sieht so aus, als würde es einen "ImportError" auf beiden Apps auslösen, die an der Beziehung beteiligt sind. Irgendwelche Ideen? – nicorellius
Klingt, als könnte es ein zirkulärer Import sein, insbesondere wenn der Fremdschlüssel in der anderen App definiert ist, weil diese App das Modell bereits von diesem Modul importiert. Hier könnten Sie versuchen, die Import-Anweisung 'from other_app import model' in die Funktionsdefinition zu verschieben, d. H. In die Zeile unter def distinct_cover_images (self)' – nimasmi