如何在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
模型。您设计数据库的方式可以为每个产品提供更多缩略图(一对多关系),但这会使您的代码不必要地复杂。
如果 thumbnail
是 Product
模型的一个字段,您可以简单地做:
{% if product.thumbnail %}
<img src="{{ product.thumbnail.url }}" alt="...">
{% endif %}
我已阅读此内容,但找不到解决我问题的内容。
我正在尝试显示一个 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
模型。您设计数据库的方式可以为每个产品提供更多缩略图(一对多关系),但这会使您的代码不必要地复杂。
如果 thumbnail
是 Product
模型的一个字段,您可以简单地做:
{% if product.thumbnail %}
<img src="{{ product.thumbnail.url }}" alt="...">
{% endif %}