通过 ForeignKey 访问 QuerySet [Django] 中 parrent 模型的图像字段



我有这个简化的model.py

class Product(models.Model):
name = models.CharField()
description = models.CharField()
class ProductImage(models.Model):
product = models.ForeignKey(Product,)
photo = models.ImageField(upload_to="product_images/")
is_main = models.BooleanField(default=False)

一个Product可以有很多ProductImage,但只有ProductImage有字段is_main=True才能与所有Product字段一起呈现在模板中。

以下数据集来自views.py

products = Product.objects.all()

所以现在我想在模板中做这样的事情:

{% for product in products %}
<img class="card-img-top" src="{{ product.productimage_set.filter(is_main=True).photo }}" alt="Card image cap">
<div class="card-body">
<h4 class="card-title">{{ product.name }}</h4>
<p class="card-text">{{ product.description }}</p>
<a href="#" class="btn btn-primary">Go somewhere</a>
</div>

但显然这是不可能的。至少不是直接从模板中。

在模板内获取带有属性is_main=TrueProduct及其图像的所有字段的正确方法是什么?

最简单的方法是将逻辑保留在模型中并添加方法或属性

class Product(models.Model):
# ...
def main_image(self):
return self.productimage_set.get(is_main=True)
# or more robust:
# return self.productimage_set.filter(is_main=True).first()

您可以在模板中访问:

... src="{{ product.main_image.photo.url }}  # don't forget the 'url'

相关内容

  • 没有找到相关文章

最新更新