Django: Как получить данные, связанные с ForeignKey через шаблон?
С нескольких недель я изучаю Python и Django. До этого момента было достаточно, чтобы прочитать вопросы и ответы других пользователей. Но теперь наступил момент моего первого вопроса.
Я постараюсь описать свою проблему как можно лучше. Моя проблема в том, что я не могу запросить или получить нужные данные.
Я хочу получить URL-адрес первого объекта класса Image, связанного с ForeignKey, с галереей, которая связана с ForeignKey с классом Entry.
Здесь 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 %}
Ясно, что я хочу?
Может ли кто-нибудь помочь мне и, если возможно, написать краткое объяснение?
привет
Бастиан
Ответы
Ответ 1
Вы можете использовать связанные элементы, как другие атрибуты в шаблоне, чтобы вы могли сделать что-то вроде: item.gallery_set.all.0.image_set.all.0.picture.img
. Однако было бы проще определить метод в BlogEntry, который посмотрел бы и вернул соответствующую картинку, чтобы вы могли просто сделать item.first_image
или что-то вроде этого
Ответ 2
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')
Вы должны добавить связанное имя в чужой ключ в модели галереи и в виде шаблона:
{% for g in blogentry.galleries.all %}
{{g.name}}
{%for i in g.images.all %}
<img src="{{i.picture.url}}">{{i.picture}}</img>
{% endfor %}
{% endfor %}