Как вывести фотографию конкретного товара из базы данных, который находится в корзине, построенной на сессиях? Код на Python

Здравствуйте Прошу помощи, Я делаю интернет магазин на Python. Есть два приложения Orders и Products.

В Orders есть модель ProductInBasket

class ProductInBasket(models.Model):

session_key = models.CharField(max_length=128, blank=True, null=True, default=None)
order = models.ForeignKey(Order, on_delete=models.CASCADE, blank=True, null=True, default=None)
product = models.ForeignKey(Product, on_delete=models.CASCADE, blank=True, null=True, default=None)
nmb = models.IntegerField(default=1)
price_per_item = models.DecimalField(max_digits=10, decimal_places=2, default=0)
total_price = models.DecimalField(max_digits=10, decimal_places=2, default=0)
is_active = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True, auto_now=False)
update = models.DateTimeField(auto_now_add=False, auto_now=True)

def __str__(self):
    return self.product.name

class Meta:
    verbose_name = 'Товар в корзине'
    verbose_name_plural = 'Товары в корзине'

def save(self, *args, **kwargs):
    price_per_item = self.product.price
    self.price_per_item = price_per_item
    self.total_price = int(self.nmb) * self.price_per_item


    super(ProductInBasket, self).save(*args, **kwargs)

В Products есть модели Product и ProductImage

class Product(models.Model):

name = models.CharField(max_length=64, blank=True, null=True, default=None)
price = models.DecimalField(max_digits=10, decimal_places=2, default=0)
discount = models.IntegerField(default=0)
category = models.ForeignKey(ProductCategory, on_delete=models.CASCADE, blank=True, null=True, default=None)
short_description = models.TextField(blank=True, null=True, default=None)
is_active = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True, auto_now=False)
update = models.DateTimeField(auto_now_add=False, auto_now=True)

def __str__(self):
    return 'Цена: ' + str(self.price) + ' ' + self.name

class Meta:
    verbose_name = 'Товар'
    verbose_name_plural = 'Товары'

class ProductImage(models.Model):

product = models.ForeignKey(Product, on_delete=models.CASCADE, blank=True, null=True, default=None)
image = models.ImageField(upload_to='media/product_images/', null=True, blank=True)
is_main = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True, auto_now=False)
update = models.DateTimeField(auto_now_add=False, auto_now=True)

def __str__(self):
    return str(self.id)

class Meta:
    verbose_name = 'Фотографию'
    verbose_name_plural = 'Фотографии'

Корзина построена на сессиях. Имеется связь между ProductInBascet и Product, всю необходимую информацию я вывел но фотографию товара, который находится в корзине, я вывести не могу. во вьюхе у меня вот такой код для вывода информации в корзине:

def checkout(request):
session_key = request.session.session_key

products_in_basket = ProductInBasket.objects.filter(session_key=session_key, is_active=True)
products = Product.objects.all()
images = ProductImage.objects.filter(product__in=products, is_active=True, is_main=True, product__is_active=True)

context = {
    'products': products,
    'images': images,
    'products_in_basket': products_in_basket,
}
return render(request, 'shop/checkout.html', context)

В шаблоне Checkout.html У меня выводится все фотографии конкретного товара которые находятся в базе, но мне нужна всего одна фотография которая активная.

Checkout.html:

{% for product_in_basket in products_in_basket %}
                            
                            <tr>
                                <td class="product-col">

                                    {% for image in images %}
                                    <img src="{{ image.image.url }}" alt="">
                                    {% endfor %}
                                   
                                    <div class="pc-title">
                                        <h4>{{ product_in_basket.product.name }}</h4>
                                        <p>
                                                {{ product_in_basket.product.price }} руб.
                                        </p>
                                    </div>
                                </td>

                                <form action="" method="POST">
                                    {% csrf_token %}
                                    <td class="quy-col">
                                        <div class="quantity">
                                            <input type="number" min="1" value="{{ product_in_basket.nmb }}" class="pro-qty">

                                        </div>
                                    </td>

                                    </td>
                               </form>
                                <td class="total-col">
                                    <h4>
                                        {{ product_in_basket.total_price }} руб.
                                    </h4>
                                </td>
                                <td class="deletepng">
                                    <a class="delete-item" href="" data-product_id="{{ product_in_basket.id }}"><img src="{% static 'media/img/delete.png' %}"></a>
                              </td>
                              
                            </tr>

                            {% endfor %}

Я понимаю что у меня для вывода фотографии отделный цикл, в этом то и загвозка, я не могу понять как вывести через ProductInBascet Фотографию из ProductImage которая активная. Связи между ProductInBascet и ProductImage нет. Я пытался ее делать но все не то, перепробовал многое!


Ответы (0 шт):