python - 如何显示多对一关系的内容
问题描述
所以我要疯了,试图弄清楚这似乎是一个非常简单的任务。
我正在制作一个投资组合网站。它有 2 个模型,项目和图像。Project 包含每个项目的大部分数据,而 Image 以多对一的关系为每个项目提供可变数量的图像。
在主页上,我想在各自的部分中显示每个项目,并在各自的部分中显示每个项目的图像。目前,我已经显示了项目,并且能够在每个部分下显示数据库中的所有图像:
{% for image in images.all %}
<img src="{{ image.image.url }}" alt="">
{% endfor %}
尽管浏览了文档、堆栈答案和网络帖子的页面,但我终其一生都无法弄清楚如何仅显示模板中每个相应部分的图像。
我已经看到了很多关于如何从视图/模型层查询这种类型关系中的模型的示例,但这些似乎都不适用于模板层。如果我要走那条路,我也不知道如何在不同的层上执行查询并将其发送到模板。
模型.py
class Project(models.Model):
title = models.TextField()
year = models.CharField(max_length=20)
tech = models.TextField()
role = models.TextField()
description = models.TextField()
def __str__(self):
return self.title
class Image(models.Model):
name = models.TextField()
image = models.ImageField(upload_to='images/project_images/')
project = models.ForeignKey(to=Project, on_delete=models.CASCADE)
def __str__(self):
return self.name
视图.py
def index(request):
home = Home.objects
projects = Project.objects
images = Image.objects
return render(request, 'portfolio/home.html', {'home': home,
'projects': projects, 'images': images})
模板
{% for project in projects.all %}
<h2>{{ project.title }}</h2>
{{ project.tech|linebreaks }}
{% for image in project.image_set.all %}
<img src="{{ image.project_image.url }}" alt="">
{% endfor %}
{% endfor %}
解决方案
您可以将属性添加到项目模型中,并将“related_name”添加到项目 ForeignKey
模型.py
class Project(models.Model):
title = models.TextField()
year = models.CharField(max_length=20)
tech = models.TextField()
role = models.TextField()
description = models.TextField()
@property
def get_images(self):
return self.images.all()
class Image(models.Model):
name = models.TextField()
image = models.ImageField(upload_to='images/project_images/')
project = models.ForeignKey(to=Project, related_name='images', on_delete=models.CASCADE)
然后在模板中,您可以调用项目对象,使用我们定义的属性来获取该项目对象的所有图像
模板
{% for image in project.get_images %}
#DO Something for each image
{% endfor %}
推荐阅读
- php - 在 CodeIgniter 3 中使用 fpdi 嵌入 pdf 时出错
- html - 如何在网站的浏览器标题栏中添加网站图标图像
- r - 查找数字类型的数据集的列数
- python - Python:NumPy 排序数组
- google-vr - AccessDeniedAccess denied.Anonymous 调用者没有 storage.objects.get 访问 Google Cloud Storage 对象的权限
- spring - 为 Map 使用 @CompositeProperty 注释
> 在使用 Kotlin 和 Neo4j 的 Spring Boot 应用程序中 - function - 将值从函数传递到另一个 Kotlin 类
- python - 如何在 Python 中解释一年前的 RFC 3339 日期时间字符串?
- google-maps - 可以在 viewmodelscope 中创建 clicklisteners(或其他 listeners)吗?
- python - 类中用于特征选择的函数的解释