order list view and serilaizer

This commit is contained in:
Parsa Nazer
2025-02-25 00:54:50 +03:30
parent 1246a3a8bb
commit 880ab60fac
4 changed files with 33 additions and 19 deletions
+11 -9
View File
@@ -59,21 +59,23 @@ class OrderModel(models.Model):
print('didnt send')
super().save(*args, **kwargs)
def total_with_discount(self):
total_with_item_discount = sum(item.total_with_discount() for item in self.items.all())
if self.discount_code:
if not self.discount_code.is_valid():
raise DiscountNotAvailableError('این کد تخفیف دیگر معتبر نیست')
discount_percent = self.discount_code.percent
return total_with_item_discount * ((100 - discount_percent) / 100)
return total_with_item_discount
def discount(self):
pass
# total_with_item_discount = sum(item.total_with_discount() for item in self.items.all())
# if self.discount_code:
# if not self.discount_code.is_valid():
# raise DiscountNotAvailableError('این کد تخفیف دیگر معتبر نیست')
# discount_percent = self.discount_code.percent
# return total_with_item_discount * ((100 - discount_percent) / 100)
# return total_with_item_discount
def tax(self):
return self.total_without_tax() * 0.2
def total(self):
return self.total_with_discount() + self.tax()
pass
# return self.total_with_discount() + self.tax()
def remove_order_item(self, item_pk, quantity):
pass
+7 -1
View File
@@ -8,8 +8,14 @@ class OrderItemSerailzier(serializers.ModelSerializer):
fields = "__all__"
read_only_fields = ('order', 'product')
class OrderModelSerializer(serializers.ModelSerializer):
class CartSerializer(serializers.ModelSerializer):
items = OrderItemSerailzier(many=True)
class Meta:
model = OrderModel
fields = ['address', 'created_at', 'is_paid', 'status', 'discount_code', 'items']
class OrderSerializer(serializers.ModelSerializer):
class Meta:
model = OrderModel
fields = ['address', 'created_at', 'is_paid', 'status', 'discount_code',]
+2 -1
View File
@@ -1,9 +1,10 @@
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path, include
from .views import CartItemViews, CartView
from .views import CartItemViews, CartView, OrderlistView
urlpatterns = [
path('list', OrderlistView.as_view(), name='order-list'),
path('cart', CartView.as_view()),
path('cart/item/<int:pk>', CartItemViews.as_view(), name='change-item-cart'),
# path('payment', CartView.as_view()),
+12 -7
View File
@@ -4,7 +4,7 @@ from rest_framework.views import APIView, Response
from django.shortcuts import get_object_or_404
from product.models import ProductVariant
from rest_framework.permissions import IsAuthenticated
from .serializers import OrderItemSerailzier, OrderModelSerializer
from .serializers import *
# from cart.models import
from rest_framework import status
from .models import OrderItemModel, OrderModel
@@ -53,11 +53,6 @@ class CartItemViews(APIView):
user=request.user,
status='CART'
)
# order_item, created = OrderItemModel.objects.get_or_create(
# order=cart_order,
# product=product_variant,
# defaults={'quantity': request.data.get('quantity', 1)}
# )
order_item = get_object_or_404(OrderItemModel, order=cart_order, product=product_variant)
order_item.delete()
return Response({'detail': f'محصول {product_variant.product.name} از سبد خرید پاک شد'}, status=status.HTTP_204_NO_CONTENT)
@@ -66,9 +61,19 @@ class CartItemViews(APIView):
class CartView(APIView):
permission_classes = [IsAuthenticated]
serializer_class = OrderModelSerializer
serializer_class = CartSerializer
def get(self, request):
user = request.user
cart_instance, created = OrderModel.objects.get_or_create(user=user, status='CART')
cart_ser = self.serializer_class(instance=cart_instance, context={'request': request})
return Response(cart_ser.data, status=status.HTTP_200_OK)
class OrderlistView(APIView):
permission_classes = [IsAuthenticated]
serializer_class = OrderSerializer
def get(self, request):
user = request.user
orders = OrderModel.objects.filter(user=user).exclude(status="CART")
orders_ser = self.serializer_class(instance=orders, many=True, context={'request': request})
return Response(orders_ser.data, status=status.HTTP_200_OK)