Вопрос по foreign-keys, templates, django, django-related-manager – Django: Как получить данные, связанные с ForeignKey через шаблон?

11

Уже несколько недель я изучаю Python и Django. До этого момента было достаточно прочитать вопросы и ответы других пользователей. Но теперь настал момент моего первого собственного вопроса.

Я постараюсь описать мою проблему как можно лучше. Моя проблема в том, что я не могу запросить или получить данные, которые я хочу.

Я хочу получить URL-адрес первого объекта класса Image, который связан с ForeignKey для галереи, который связан с ForeignKey для класса Entry.

Вот пока модели.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 %}

Понятно что я хочу? Может ли кто-нибудь мне помочь и, если возможно, написать краткое объяснение?

Привет Бастиан

Ваш Ответ

2   ответа
14

Вы можетеДоступ к связанным членам какдругие атрибуты в шаблонетак что вы можете сделать что-то вроде:item.gallery_set.all.0.image_set.all.0.picture.img, Однако, может быть проще определить метод в BlogEntry, который ищет и возвращает соответствующую картинку, так что вы можете просто сделатьitem.first_image или что-то типа того

Спасибо Спасибо спасибо! :) user1459531
Да, добавил ссылку на него. Надеюсь, это поможет!
Большое спасибо за ваш быстрый ответ :). Я не совсем понимаю эту строку кода. Не могли бы вы дать мне ссылку на документацию доступа к связанным членам? Я не нашел что-то на странице документации Django. 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')

Вы должны добавить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 %}

Похожие вопросы