Как вывести фотографию конкретного товара из базы данных, который находится в корзине, построенной на сессиях? Код на 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 нет. Я пытался ее делать но все не то, перепробовал многое!