2012-06-15 10 views
11

Da qualche settimana sto imparando Python e Django. Fino a questo punto è stato sufficiente leggere le domande e le risposte di altri utenti. Ma ora è arrivato il momento della mia prima domanda.Django: come ottenere dati collegati da ForeignKey tramite Template?

Cercherò di descrivere il mio problema nel miglior modo possibile. Il mio problema è che non posso interrogare o ottenere i dati che voglio.

Desidero ottenere l'url del primo oggetto di classe Image associato a ForeignKey a una Gallery, associata a ForeignKey alla voce Entry.

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') 

The View:

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

Il Template:

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

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

saluti Bastian

risposta

14

Si può access related members proprio come other attributes in a template, in modo da poter fare qualcosa di simile: item.gallery_set.all.0.image_set.all.0.picture.img. Tuttavia, potrebbe essere più facile da definire un metodo su blogEntry che alzò lo sguardo e restituito l'immagine appropriata, in modo che si può solo fare item.first_image o qualcosa del genere

+0

Grazie mille per la rapida risposta :). Non capisco esattamente questa riga di codice. Potresti fornirmi un link a una documentazione dell'accesso ai membri correlati? Non ho trovato qualcosa nella pagina di documentazione di Django. – user1459531

+0

Sì, aggiunto un link ad esso. Spero possa aiutare! – cberner

+0

Grazie, grazie, grazie! :) – user1459531

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') 

È necessario aggiungere related_name in chiave esterna modello di galleria e in visualizzazione modello:

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