Django values_list() и обратный внешний ключ изображения
У меня проблема с изображениями, они не отображаются в шаблоне, может кто-нибудь помочь мне с каким-нибудь решением
class Product(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
myshop = models.ForeignKey(MyShop, on_delete=models.CASCADE, related_name="shop_product")
title = models.CharField(max_length=255)
description = models.TextField(blank=True)
class ProductImage(models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name="product_image")
image = models.ImageField(upload_to='products/images',
validators=[validate_image_file_extension, validate_file_size,
FileExtensionValidator(['JPEG', 'JPG', 'PNG'])])
{% for product in products %}
{% for image in product.product_image.all %}
{% if image.is_feature %}
<img src="{{ image.image.url }}" alt="" width="80" height="80">
{% endif %}
{% endfor %}
{% endfor %}
products = Product.prod_obj.select_related(
'myshop'
).filter(id__in=product_ids).values_list('myshop', 'title', 'description', 'product_image', named=True)
Не используйте .values_list()
[Django-doc] или .values()
[Django-doc]: это удаляет слой логики модели, и поэтому в результате вы действительно больше не сможете получить доступ к .url
.
Запрос с:
products = Product.prod_obj.select_related('myshop').prefetch_related(
'product_image'
).filter(id__in=product_ids)
Для получения дополнительной информации смотрите эту статью о (чрезмерном) использовании .values()
, которую я написал.