Python Django显示相关名称列表中的第一项

Python Django显示相关名称列表中的第一项,python,django,python-3.x,django-models,django-related-manager,Python,Django,Python 3.x,Django Models,Django Related Manager,我正在使用Python(3.7)和Django(2.2)进行一个项目在其中,我实现了两个模型ItemModel和Images,因此每个项目都将有多个图像,并将项目添加到Images模型中,并添加一个相关的\u名称,但当我尝试在Django模板中访问这些图像时,它没有提供任何关于这些图像的信息 以下是我的模型: 来自models.py: class ItemModel(models.Model): stock_number = models.IntegerField(blank=False

我正在使用Python(3.7)和Django(2.2)进行一个项目在其中,我实现了两个模型
ItemModel
Images
,因此每个项目都将有多个图像,并将项目添加到
Images
模型中,并添加一个
相关的\u名称
,但当我尝试在Django模板中访问这些图像时,它没有提供任何关于这些图像的信息

以下是我的模型: 来自
models.py

class ItemModel(models.Model):
    stock_number = models.IntegerField(blank=False)
    title = models.CharField(max_length=255, blank=False)
    price = models.IntegerField(blank=False)
    description = models.TextField(max_length=1000)
    condition = models.CharField(max_length=255, choices=COND_CHOICES, blank=False)
    model = models.CharField(max_length=255)
    dimensions = models.CharField(max_length=255)
    make = models.CharField(max_length=255)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title


class Images(models.Model):
    item = models.ForeignKey(ItemModel, on_delete=models.CASCADE, related_name='images')
    image = models.ImageField(upload_to=images_directory_path)
更新:以下是我用来重命名图像的函数:

下面是我尝试访问模板中某个项目的这些图像:

{% for img in item.images.all %}
    {% if forloop.first %}
        <td> {{ item.images.first.name }}</td>
    {% endif %}
{% endfor %}

这里可能有什么问题?

您不需要for循环

<td> {{ item.images.first.name }}</td>
{{item.images.first.name}

可以,因为它将返回第一个图像(如果存在),而不必在每个图像上循环

{% for img in item.images.all %}
    {% if forloop.first %}
        <td> <img src="{{ img.image.url }}"/> </td>
    {% endif %}
{% endfor %}
{%用于item.images.all%中的img}
{%if-forloop.first%}
{%endif%}
{%endfor%}

除了Rakesh answer之外,您可能会发现在检索图像之前,有必要通过添加另一条if语句来检查图像是否存在

模板中执行此操作

{% for img in item.images.all %}
   {% if forloop.first %}
    {# add this if statement to check if the image exists in the table #}
       {% if img.image %}     
         <td><img src="{{ img.image.url }}"/></td>
       {% endif %}
   {% endif %}
 {% endfor %}
{%用于item.images.all%中的img}
{%if-forloop.first%}
{#添加此if语句以检查表#中是否存在图像}
{%if img.image%}
{%endif%}
{%endif%}
{%endfor%}

永不访问相关名称,如以下示例:

{{ item.images.first.name }}
这将导致对DB进行新的新查询,您应该像这样使用它:

{{ item.images.all.0.name }}

这不需要forloop,也将从视图中的原始查询中预取,只需在视图中的原始查询中添加.prefetch_related()。

您的视图在哪里?添加了Hi@KostasCharitidis视图
ItemModel.objects.all()
永远不会引发
DoesNotExist
异常,您的try/exception块不会执行任何应该执行的操作?您的
图像
模型没有字段
名称
,您希望渲染什么?未返回任何内容
{{ item.images.first.name }}
{{ item.images.all.0.name }}