我正在创建一个django电子商务网站。 我的购物车页面显示了商品,数量,价格和所有订单内容。我正在创建一个微型购物车,当用户将鼠标悬停在购物车图标上时,该购物车会显示在所有页面上,该图标显示所有这些数据,用户可以单击它以转到购物车页面。 这在我所有其他页面(产品页面和购物车页面)上都起作用,但是我似乎无法为每种产品在我的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页面“迷你购物车”中显示了订单商品。很长的代码,我很抱歉,但是我不确定需要哪些代码。 我如何在我的DetailView中添加“ items”和“ order”上下文,类似于我对其他视图所做的操作?