2012-06-15 12 views
11

Desde hace unas semanas estoy aprendiendo Python y Django. Hasta este punto ha sido suficiente para leer las preguntas y las respuestas de otros usuarios. Pero ahora ha llegado el momento de mi primera pregunta.Django: ¿Cómo obtener datos conectados mediante ForeignKey a través de Template?

Trataré de describir mi problema lo mejor que pueda. Mi problema es que no puedo consultar u obtener los datos que quiero.

Deseo obtener la url del primer objeto de clase Imagen asociada por ForeignKey a una Galería, que ForeignKey asocia a la clase Entrada.

Aquí el models.py hasta ahora:

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

La Vista:

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

La Plantilla:

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

Está claro lo que quiero? ¿Podría alguien ayudarme y, cuando sea posible, escribir una breve explicación?

saludos Bastian

Respuesta

14

Puede access related members igual other attributes in a template, por lo que puede hacer algo como: item.gallery_set.all.0.image_set.all.0.picture.img. Sin embargo, podría ser más fácil definir un método de BlogEntry que levantó la vista y volvió la imagen apropiada, por lo que sólo podría hacer item.first_image o algo por el estilo

+0

Muchas gracias por su respuesta rápida :). No entiendo exactamente esta línea de código. ¿Podría darme un enlace a una documentación del acceso a miembros relacionados? No encontré nada en la página de documentación de Django. – user1459531

+0

Sí, agregó un enlace a él. ¡Espero que ayude! – cberner

+0

Gracias, gracias, gracias! :) – 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') 

Hay que añadir related_name en clave externa en modelo de galería y en la vista de plantilla:

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