Django加入mysql表的最佳实践

时间:2018-04-27 21:25:07

标签: mysql django django-models django-templates django-views

我的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的新手,任何解决方案都会帮助我。 谢谢你提前。

1 个答案:

答案 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 %}

参考ForeignKey.related_name