我的Django项目中有两个这样的模型。
class Product(models.Model):
name = models.CharField(max_length=100)
category = models.ForeignKey(ProductCategory, on_delete=models.CASCADE)
sub_category = models.ForeignKey(ProductSubCategory, on_delete=models.CASCADE)
comment = models.TextField()
size = models.CharField(max_length=60)
price = models.FloatField(default=0)
class ProductImage(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
alt = models.CharField(max_length=200)
picture = models.FileField()
当然,产品可以有2张或更多图片。 如何在视图中获取包含所有相关每个图像的所有产品,并将结果作为上下文传递给模板。
我也搜索并试过这些: 的 prefetch_related 下, 的 select_related 下, 原始SQL查询 以及一些建议的方法。但无法得到结果。
我是Django的新手,任何解决方案都会帮助我。 谢谢你提前。
答案 0 :(得分:0)
您可以使用prefetch_related
来优化查询
Product.objects.filter(sub_category = sub_category_id).prefetch_related('productimage_set')
然后,在模板中
{% for image in product.productimage_set %}
display image here
{% endfor %}
您可以在外键中设置related_name
,例如
product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name="product_images")
然后在视图中
Product.objects.filter(sub_category = sub_category_id).prefetch_related('product_images')
然后在模板
中结束{% for image in product.product_images %}
display image here
{% endfor %}