django 买一送一功能

时间:2021-08-01 14:00:48

标签: django django-rest-framework

我正在尝试制作一个电子商务网站。 -现在我想为选定的产品添加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)

0 个答案:

没有答案