如何在ListView中显示外键对象 - Django

How to display ForeignKey object in ListView - Django

我已阅读此内容,但找不到解决我问题的内容。

我正在尝试显示一个 table,其中包含带有缩略图的产品列表。 table returns 中的缩略图字段没有 url,但 returns 损坏的图像 link 仅适用于拥有缩略图的产品。

这个产品列表使用 ListView,我可以在使用相同模板代码的产品详细视图(DetailView)中很好地显示缩略图

我需要做什么才能在 ListView 中显示每个产品的缩略图...即。我必须如何更改我的查询集才能将缩略图与产品一起传递到模板中?

查看

class ProductView(generic.ListView):
    template_name = 'product/product.html'
    context_object_name = 'product_list'

    def get_queryset(self):
        return Product.objects.all()

模板

    {% for product in product_list %}
        <tr>
            <td><a href="/product/{{ product.id }}/">{{ product.title }}</a></td>
            <td>    {% if product.thumbnails.all %}
                    <img src="{{ product.thumbnail.url }}" alt="...">
                    {% endif %}
            </td>
            <td>{{ product.category }}</td>
            <td>{{ product.subcategory }}</td>
            <td>{{ product.status }}</td>
            <td>{{ product.date_added }}</td>
    {% endfor %}

型号

class ProductThumbnail(models.Model):   
    product = models.ForeignKey(Product, default=None, related_name='thumbnails')
    thumbnail = models.ImageField(upload_to='thumbnails/',
                          verbose_name='thumbnail', blank=True,)

如果需要更多信息,请告诉我。

{% if product.thumbnails.all %} 应该是 {% if product.thumbnail %}

{% if product.thumbnails.all %} 只有在 product.thumbnails 是反向关系时才有意义

编辑:我误读了问题

您需要循环浏览缩略图{% for thumbnail in product.thumbnails.all %}

如果每个产品只有一个缩略图,您应该添加字段

thumbnail = models.ImageField(upload_to='thumbnails/',
                      verbose_name='thumbnail', blank=True)

直接转到模型 Product 并放弃 ProductThumbnail 模型。您设计数据库的方式可以为每个产品提供更多缩略图(一对多关系),但这会使您的代码不必要地复杂。

如果 thumbnailProduct 模型的一个字段,您可以简单地做:

{% if product.thumbnail %}
   <img src="{{ product.thumbnail.url }}" alt="...">
{% endif %}