Django лучшие практики для объединения таблиц mysql - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть две модели, подобные этой, в моем проекте 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 голосов
/ 28 апреля 2018

Вы можете использовать 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

...