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') print('didnt send')
super().save(*args, **kwargs) super().save(*args, **kwargs)
def total_with_discount(self): def discount(self):
total_with_item_discount = sum(item.total_with_discount() for item in self.items.all()) pass
if self.discount_code: # total_with_item_discount = sum(item.total_with_discount() for item in self.items.all())
if not self.discount_code.is_valid(): # if self.discount_code:
raise DiscountNotAvailableError('این کد تخفیف دیگر معتبر نیست') # if not self.discount_code.is_valid():
discount_percent = self.discount_code.percent # raise DiscountNotAvailableError('این کد تخفیف دیگر معتبر نیست')
return total_with_item_discount * ((100 - discount_percent) / 100) # discount_percent = self.discount_code.percent
return total_with_item_discount # return total_with_item_discount * ((100 - discount_percent) / 100)
# return total_with_item_discount
def tax(self): def tax(self):
return self.total_without_tax() * 0.2 return self.total_without_tax() * 0.2
def total(self): 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): def remove_order_item(self, item_pk, quantity):
pass pass
+8 -2
View File
@@ -8,8 +8,14 @@ class OrderItemSerailzier(serializers.ModelSerializer):
fields = "__all__" fields = "__all__"
read_only_fields = ('order', 'product') read_only_fields = ('order', 'product')
class OrderModelSerializer(serializers.ModelSerializer): class CartSerializer(serializers.ModelSerializer):
items = OrderItemSerailzier(many=True) items = OrderItemSerailzier(many=True)
class Meta: class Meta:
model = OrderModel model = OrderModel
fields = ['address', 'created_at', 'is_paid', 'status', 'discount_code', 'items'] 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.conf.urls.static import static
from django.contrib import admin from django.contrib import admin
from django.urls import path, include from django.urls import path, include
from .views import CartItemViews, CartView from .views import CartItemViews, CartView, OrderlistView
urlpatterns = [ urlpatterns = [
path('list', OrderlistView.as_view(), name='order-list'),
path('cart', CartView.as_view()), path('cart', CartView.as_view()),
path('cart/item/<int:pk>', CartItemViews.as_view(), name='change-item-cart'), path('cart/item/<int:pk>', CartItemViews.as_view(), name='change-item-cart'),
# path('payment', CartView.as_view()), # 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 django.shortcuts import get_object_or_404
from product.models import ProductVariant from product.models import ProductVariant
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from .serializers import OrderItemSerailzier, OrderModelSerializer from .serializers import *
# from cart.models import # from cart.models import
from rest_framework import status from rest_framework import status
from .models import OrderItemModel, OrderModel from .models import OrderItemModel, OrderModel
@@ -53,11 +53,6 @@ class CartItemViews(APIView):
user=request.user, user=request.user,
status='CART' 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 = get_object_or_404(OrderItemModel, order=cart_order, product=product_variant)
order_item.delete() order_item.delete()
return Response({'detail': f'محصول {product_variant.product.name} از سبد خرید پاک شد'}, status=status.HTTP_204_NO_CONTENT) return Response({'detail': f'محصول {product_variant.product.name} از سبد خرید پاک شد'}, status=status.HTTP_204_NO_CONTENT)
@@ -66,9 +61,19 @@ class CartItemViews(APIView):
class CartView(APIView): class CartView(APIView):
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]
serializer_class = OrderModelSerializer serializer_class = CartSerializer
def get(self, request): def get(self, request):
user = request.user user = request.user
cart_instance, created = OrderModel.objects.get_or_create(user=user, status='CART') cart_instance, created = OrderModel.objects.get_or_create(user=user, status='CART')
cart_ser = self.serializer_class(instance=cart_instance, context={'request': request}) cart_ser = self.serializer_class(instance=cart_instance, context={'request': request})
return Response(cart_ser.data, status=status.HTTP_200_OK) 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)