我正在尝试显示包含所有照片的照相会议,因此我在一个模型中具有会议名称,并且在 通过外键链接的另一个模型。我无法在其中显示 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 %}
我期望这样:
伍兹
海滩
答案 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
。