Я создаю django веб-сайт электронной торговли. На странице моей корзины отображаются товары, количество, цена и все остальное в заказе. Я создаю мини-корзину, которая отображается на всех страницах, когда пользователь наводит курсор на значок корзины, на котором отображаются все эти данные, и пользователь может щелкнуть по ней, чтобы перейти на страницу корзины go. Это работало на всех других моих страницах (страница продуктов и страница корзины), но я не могу добавить необходимые переменные на мою страницу DetailView для каждого продукта.
С этим связаны следующие модели:
class Product(models.Model):
name = models.CharField(max_length=200, null=True)
price = models.FloatField(max_length=200)
description = models.TextField(max_length=500, default='No description')
digital = models.BooleanField(default=False, null=True, blank=False)
image_1 = models.ImageField(null=True, blank=False, default='')
image_2 = models.ImageField(null=False, blank=True, default='')
image_3 = models.ImageField(null=False, blank=True, default='')
images = [image_1,image_2,image_3,]
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('product-detail', kwargs={'pk':self.pk})
class Order(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, blank=True, null=True)
date_ordered = models.DateTimeField(auto_now_add=True)
complete = models.BooleanField(default=False, null=True, blank=False)
transaction_id = models.CharField(max_length=200, null=True)
def __str__(self):
return str(self.id)
@property
def shipping(self):
shipping = False
orderitems = self.orderitem_set.all()
for i in orderitems:
if i.product.digital == False:
shipping = True
return shipping
@property
def get_cart_total(self):
orderitems = self.orderitem_set.all()
total = sum([item.get_total for item in orderitems])
return total
def get_cart_items(self):
orderitems = self.orderitem_set.all()
total = sum([item.quantity for item in orderitems])
return total
class OrderItem(models.Model):
product = models.ForeignKey(Product, on_delete=models.SET_NULL, blank=True, null=True)
order = models.ForeignKey(Order, on_delete=models.SET_NULL, blank=True, null=True)
quantity = models.IntegerField(default=0, null=True, blank=True)
date_added = models.DateTimeField(auto_now_add=True)
@property
def get_total(self):
total = self.product.price * self.quantity
return total
И мои представления:
def products(request):
if request.user.is_authenticated:
customer = request.user.customer
order, created = Order.objects.get_or_create(customer=customer, complete=False)
items = order.orderitem_set.all()
cartItems = order.get_cart_items
else:
items = []
order = {'get_cart_total':0, 'get_cart_items':0, 'shipping':False}
cartItems = order['get_cart_items']
products = Product.objects.all()
context = {'items':items, 'order':order,'products':products, 'cartItems':cartItems}
return render(request, 'store/products.html', context)
def cart(request):
if request.user.is_authenticated:
customer = request.user.customer
order, created = Order.objects.get_or_create(customer=customer, complete=False)
items = order.orderitem_set.all()
cartItems = order.get_cart_items
else:
items = []
order = {'get_cart_total':0, 'get_cart_items':0, 'shipping':False}
cartItems = order['get_cart_items']
context = {'items':items, 'order':order, 'cartItems':cartItems}
return render(request, 'store/cart.html', context)
class ProductDetailView(DetailView):
model = Product
Итак, в основном, мне нужно, чтобы мой ProductDetailView получал контекст элементов и порядка, потому что я использую эти переменные для отображения элементов заказа в Моя страница «Подробный просмотр» 'мини-тележка'. Прошу прощения за длинные коды, но я не был уверен, какие из них нужны. Как мне добавить контекст «элементы» и «порядок» в мой DetailView, как я сделал для других моих представлений?