Django: как получить данные, связанные с помощью ForeignKey через шаблон?
С нескольких недель я изучаю Python и Django. До этого момента было достаточно, чтобы прочитать вопросы и ответы других пользователей.Но теперь настал момент моего первого вопроса.
я постараюсь описать мою проблему как можно лучше. Моя проблема в том, что я не могу запросить или получить данные, которые я хочу.
Я хочу получить url-адрес первого объекта изображения класса, который связан ForeignKey с галереей, которая связана ForeignKey с классом Вхождение.
здесь models.py пока:
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')
Вид:
def view(request):
return render_to_response('mainview.html', {
'entryquery': BlogEntry.objects.all(),
}
)
Шаблон:
{% for item in entryquery %}
<h1>{{ item.title }}</h1>
<img src="{{ item.WHAT TO ENTER HERE? :) }}" />
{% endfor %}
понятно, чего я хочу? Может кто-нибудь помочь мне и по возможности написать краткое объяснение?
приветы Бастиан!--4-->
2 ответов
Вы можете доступ к связанным членам как другие атрибуты в шаблоне, так что вы можете сделать что-то вроде: item.gallery_set.all.0.image_set.all.0.picture.img
. Тем не менее, может быть проще определить метод в BlogEntry, который посмотрел и вернул соответствующее изображение, чтобы вы могли просто сделать item.first_image
или что-то в этом роде
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')
вы должны добавить related_name во внешнем ключе в модели галереи и в представлении шаблона:
{% for g in blogentry.galleries.all %}
{{g.name}}
{%for i in g.images.all %}
<img src="{{i.picture.url}}">{{i.picture}}</img>
{% endfor %}
{% endfor %}