我正在尝试制作一个电子商务网站。 -现在我想为选定的产品添加BOGO(买一送一)功能。
我正在尝试找到一种在代码中实现这一点的方法。但我不知道我将如何做到这一点。
请告诉我应该如何以一种好的方式做到这一点。
我在下面添加了必要的代码,这将有助于您解决我的问题。 谢谢
产品型号
class Products(models.Model):
name = models.CharField(max_length=200)
slug = models.SlugField(blank=True, null=True, unique=True)
category = models.CharField(
max_length=200, blank=True, null=True, choices=CATEGORY_CHOICES)
thumbnail = models.ImageField(blank=True, null=True, upload_to="thumbnail")
short_desc = models.TextField(blank=True, null=True)
description = models.TextField(blank=True, null=True)
manufacturer = models.CharField(max_length=200, blank=True, null=True)
country_made = models.CharField(max_length=200, blank=True, null=True)
benifits = models.CharField(max_length=200, blank=True, null=True)
price = models.PositiveIntegerField(null=True)
discount_price = models.PositiveIntegerField(null=True)
timestamp = models.DateTimeField(auto_now_add=True)
best_selling = models.BooleanField(default=False)
featured = models.BooleanField(default=False)
trending = models.BooleanField(default=False)
quantity_in_stock = models.PositiveIntegerField(null=True, blank=True)
out_of_stock = models.BooleanField(default=False)
# size
s_size = models.BooleanField(default=True)
m_size = models.BooleanField(default=True)
buy_one_get_one = models.BooleanField(default = False)
product_delivery_time = models.IntegerField(default=2)
加入购物车查看
class AddProductToCart(views.APIView):
def post(self, request, *args, **kwargs):
slug = request.data.get('slug', None)
quantity = request.data.get('quantity', None)
size = request.data.get('size', None)
if size is None:
return Response({"msg": "Please specify size"}, status=status.HTTP_400_BAD_REQUEST)
if slug is None:
return Response({"msg": "Something went wrong"}, status=status.HTTP_404_NOT_FOUND)
item = get_object_or_404(Products, slug=slug)
if item.discount_price:
total_price = quantity * item.discount_price
else:
total_price = quantity * item.price
print('total_price', total_price)
order_item = Cart.objects.create(
product=item, user=request.user, quantity=quantity, size=size, expires=False, buy_one_get_one=item.buy_one_get_one)
serializer = CartSerailizers(order_item)
order_item.save()
order_qs = Order.objects.filter(user=request.user, ordered=False)
if order_qs.exists():
order = order_qs[0]
if not order.products.filter(product__id=order_item.id).exists():
order.products.add(order_item)
order.sub_total += total_price
order.save()
return Response({'item': serializer.data}, status=status.HTTP_200_OK)
else:
return Response({"msg": "something went wrong"}, status=status.HTTP_400_BAD_REQUEST)
else:
ordered_date = timezone.now()
order = Order.objects.create(
user=request.user, ordered_date=ordered_date, sub_total=total_price)
order.products.add(order_item)
return Response({'item': serializer.data}, status=status.HTTP_200_OK)
最终订购模型
class Order(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
products = models.ManyToManyField(Cart)
start_date = models.DateTimeField(auto_now_add=True)
ordered_date = models.DateTimeField()
coupon = models.CharField(max_length=20, blank=True, null=True)
sub_total = models.IntegerField(default=0, blank=True, null=True)
total = models.IntegerField(blank=True, null=True)
ordered = models.BooleanField(default=False)
address = models.ForeignKey(
Address, on_delete=models.SET_NULL, blank=True, null=True)
delivery_charge = models.ForeignKey(
DeliveryCharge, on_delete=models.CASCADE, blank=True, null=True)
shipping = models.IntegerField(default=60)
payment_method = models.CharField(max_length=50, blank=True, null=True)
payment_number = models.CharField(max_length=100, blank=True, null=True)
being_delivered = models.BooleanField(default=False)
received = models.BooleanField(default=False)
refund_requested = models.BooleanField(default=False)
refund_granted = models.BooleanField(default=False)