Невозможно отобразить в шаблоне внешний ключ с помощью ListView - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь отобразить фотосессию со всеми фотографиями, поэтому у меня есть имя сеанса в одной модели, и у меня есть снимки в другой модели, связанные внешним ключом. Я не могу отобразить его в HTML. Я не уверен, правильно ли я использую get_context_data ListView, и я уверен, что HTML-код неверен, но я не нашел, как это сделать.

views.py

class SessionPictures(generic.ListView):

    model = PostSession
    template_name = 'photoadmin/gallery.html'

    def get_context_data(self, **kwargs):
        context = super(SessionPictures, self).get_context_data(**kwargs)
        context['picture'] = Images.objects.all()
        return context

models.py

class PostSession(models.Model):
    session_name = models.CharField(max_length=25)
    created_date = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return str(self.session_name)


class Images(models.Model):
    name = models.ForeignKey(
        PostSession, related_name='images', on_delete=models.CASCADE, null=True, blank=True)
    picture = models.ImageField(upload_to='pictures')

html

{% extends 'base.html' %}
{% load static %}

{% block content %}


<h2>Images</h2>
<ul>
    {% for session in object_list %}
    <li>{{ session.session_name }}</li>
    <ul>

        <li>{{session.picture_set.all.url}}</li>

    </ul>
    {% endfor %}
</ul>



{% endblock %}

Я ожидаю этого:

Вудс

  • picture1.url
  • picture2.url
  • picture3.url

Пляж

  • Picture4.url
  • picture5.rul

1 Ответ

1 голос
/ 31 октября 2019

Как вы уже определили related_name="images" в модели изображений, атрибут session.images_set не будет работать с PostSession.

class Images(models.Model):
    name = models.ForeignKey(
        PostSession,<b>related_name='images'</b>, on_delete=models.CASCADE, null=True, blank=True)

Вместо этого используйте session.image.all в шаблоне (к вашему сведению: itвозвращает набор запросов, поэтому вам нужно выполнить итерацию по нему, чтобы получить объект изображения):

{% for session in object_list %}
    <li>{{ session.session_name }}</li>
    <ul>
        {% for i in session.images.all %}
            <li> i.picture.url </li>
        {% endfor %}
    </ul>
{% endfor %}

Более подробную информацию об обратной связи можно найти в documentation.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...