2012-06-15 11 views
11

Od kilku tygodni uczę się Python i Django. Do tego momentu wystarczyło przeczytać pytania i odpowiedzi innych użytkowników. Ale teraz nadszedł moment mojego pierwszego pytania.Django: Jak uzyskać dane połączone przez ForeignKey za pośrednictwem szablonu?

Postaram się opisać mój problem najlepiej jak potrafię. Mój problem polega na tym, że nie mogę przesyłać zapytań ani otrzymywać danych, których potrzebuję.

Chcę uzyskać adres URL pierwszego obiektu klasy Obraz, który jest powiązany z ForeignKey do galerii, która jest przypisana przez ForeignKey do wpisu klasy.

Tutaj models.py tak daleko:

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

Widok:

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

Szablon:

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

Oczywiste jest to, co chcę? Czy ktoś może mi pomóc, a jeśli to możliwe, napisać krótkie wyjaśnienie?

pozdrowienia Bastian

Odpowiedz

14

Można access related members jak other attributes in a template, więc można zrobić coś takiego: item.gallery_set.all.0.image_set.all.0.picture.img. Jednak może to być łatwiej określić metodę na BlogEntry że wzrok i zwrócony odpowiedni obraz, tak, że można po prostu zrobić item.first_image czy coś takiego

+0

Wielkie dzięki za szybką odpowiedź :). Nie rozumiem dokładnie tej linii kodu. Czy możesz podać mi link do dokumentacji dostępu do powiązanych członków? Nie znalazłem czegoś na stronie dokumentacji Django. – user1459531

+0

Tak, dodano link do niego. Mam nadzieję, że pomaga! – cberner

+0

Dziękuję, dziękuję, dziękuję! :) – 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') 

trzeba dodać related_name w kluczu obcym w model galerii i widok szablonu:

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