无法使用ListView在模板中显示外键

时间:2019-10-31 00:11:22

标签: django django-templates django-views

  

我正在尝试显示包含所有照片的照相会议,因此我在一个模型中具有会议名称,并且在   通过外键链接的另一个模型。我无法在其中显示   HTML,我不确定是否正在使用ListView get_context_data   正确,我肯定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 个答案:

答案 0 :(得分:1)

由于您已经在Images模型中定义了related_name="images",因此session.images_set属性不适用于PostSession

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

相反,请在模板中使用session.image.all(仅供参考:它返回一个查询集,因此您需要对其进行迭代以获取图像对象):

{% 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