Django: Come ottenere i dati collegati da ForeignKey tramite Template?

Da alcune settimane sto imparando Python e Django. Fino a questo punto è stato sufficiente per leggere le domande e le risposte di altri utenti.Ma ora è giunto il momento della mia prima domanda è venuto.

Cercherò di descrivere il mio problema, come meglio posso. Il mio problema è che non riesco a query o ottenere i dati che voglio.

Voglio ottenere l’url del primo oggetto di Immagine della sua classe, che è associato con ForeignKey di una Galleria, che è associato con ForeignKey per la Voce di classe.

Qui il models.py finora:

class BlogEntry(models.Model):
   ...
   title = models.CharField(max_length=100)
   ...

class Gallery(models.Model):
   entry = models.ForeignKey('BlogEntry')

class Image(models.Model):
  gallery = models.ForeignKey('Gallery')
  picture = models.ImageField(upload_to='img')

Vista:

def view(request):
  return render_to_response('mainview.html', {
    'entryquery': BlogEntry.objects.all(),
    }
)

Modello:

{% for item in entryquery %}
  <h1>{{ item.title }}</h1>
  <img src="{{ item.WHAT TO ENTER HERE? :) }}" />
{% endfor %}

È chiaro quello che voglio?
Qualcuno potrebbe aiutarmi e, quando possibile, di scrivere una breve spiegazione?

saluti
Bastian

 

2 Replies
  1. 15

    È possibile accesso membri correlati come gli altri attributi di un modello, così si può fare qualcosa di simile: item.gallery_set.all.0.image_set.all.0.picture.img. Tuttavia, potrebbe essere più facile definire un metodo di BlogEntry che alzò gli occhi e ha restituito l’immagine appropriata, in modo che si può fare item.first_image o qualcosa di simile

    • Grazie mille per la rapida risposta 🙂 . Non capisco esattamente questa linea di codice. Potreste darmi un link ad una documentazione di accesso ai relativi membri? Non trovai qualcosa su Django pagina di documentazione.
    • Sì, è stato aggiunto un collegamento ad esso. Speranza che aiuta!
    • Grazie, Grazie, Grazie! 🙂
  2. 0
    class BlogEntry(models.Model):
        ...
        title = models.CharField(max_length=100)
        ...
    
    class Gallery(models.Model):
        entry = models.ForeignKey('BlogEntry',related_name="galleries")
    
    class Image(models.Model):
        gallery = models.ForeignKey('Gallery',related_name='images')
        picture = models.ImageField(upload_to='img')

    Devi aggiungere related_name in chiave esterna nella galleria del modello e modello visualizza:

    {% for g in blogentry.galleries.all %}
        {{g.name}}
            {%for i in g.images.all %}
                <img src="{{i.picture.url}}">{{i.picture}}</img>
            {% endfor %}
    {% endfor %}

Lascia un commento