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(), которую я написал.

Вернуться на верх