base cart_quantity filed and filter pagination and sort for order
This commit is contained in:
+49
-2
@@ -11,6 +11,8 @@ from .models import OrderItemModel, OrderModel, DiscountCode, PaymentModel
|
|||||||
from .permissons import CanDeleteCartItemPermissions
|
from .permissons import CanDeleteCartItemPermissions
|
||||||
from azbankgateways import bankfactories, models as bank_models
|
from azbankgateways import bankfactories, models as bank_models
|
||||||
from azbankgateways.exceptions import AZBankGatewaysException
|
from azbankgateways.exceptions import AZBankGatewaysException
|
||||||
|
from drf_spectacular.utils import extend_schema, OpenApiParameter, OpenApiTypes
|
||||||
|
from utils.pagination import StructurePagination
|
||||||
try:
|
try:
|
||||||
pass
|
pass
|
||||||
except DiscountNotAvailableError:
|
except DiscountNotAvailableError:
|
||||||
@@ -107,11 +109,56 @@ class CartView(APIView):
|
|||||||
class OrderlistView(APIView):
|
class OrderlistView(APIView):
|
||||||
permission_classes = [IsAuthenticated]
|
permission_classes = [IsAuthenticated]
|
||||||
serializer_class = OrderSerializer
|
serializer_class = OrderSerializer
|
||||||
|
pagination_class = StructurePagination
|
||||||
|
@extend_schema(
|
||||||
|
parameters=[
|
||||||
|
OpenApiParameter(
|
||||||
|
name="limit",
|
||||||
|
description="لیمیتش",
|
||||||
|
required=False,
|
||||||
|
type=OpenApiTypes.INT,
|
||||||
|
),
|
||||||
|
OpenApiParameter(
|
||||||
|
name="offset",
|
||||||
|
description="افستش",
|
||||||
|
required=False,
|
||||||
|
type=OpenApiTypes.INT,
|
||||||
|
),
|
||||||
|
OpenApiParameter(
|
||||||
|
name="status",
|
||||||
|
description=(
|
||||||
|
"['CART', 'ADMIN_PENDING', 'PENDING', 'POSTED', 'RECEIVED', 'CANCELED', 'BACK']"
|
||||||
|
),
|
||||||
|
required=False,
|
||||||
|
type=OpenApiTypes.STR,
|
||||||
|
),
|
||||||
|
OpenApiParameter(
|
||||||
|
name="sort",
|
||||||
|
description=(
|
||||||
|
"Sort results by one of the following fields:\n"
|
||||||
|
"['created_at', '-created_at', 'final_price', '-final_price']"
|
||||||
|
"\nPrefix with `-` for descending order."
|
||||||
|
),
|
||||||
|
required=False,
|
||||||
|
type=OpenApiTypes.STR,
|
||||||
|
),
|
||||||
|
]
|
||||||
|
)
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
user = request.user
|
user = request.user
|
||||||
orders = OrderModel.objects.filter(user=user).exclude(status="CART")
|
orders = OrderModel.objects.filter(user=user).exclude(status="CART")
|
||||||
orders_ser = self.serializer_class(instance=orders, many=True, context={'request': request})
|
status_filter = request.query_params.get("status", None)
|
||||||
return Response(orders_ser.data, status=status.HTTP_200_OK)
|
sort = request.query_params.get('sort', None)
|
||||||
|
if status_filter in ['CART', 'ADMIN_PENDING', 'PENDING', 'POSTED', 'RECEIVED', 'CANCELED', 'BACK']:
|
||||||
|
orders.filter(status=status_filter)
|
||||||
|
if sort:
|
||||||
|
if sort not in ['created_at', '-created_at', 'final_price', '-final_price']:
|
||||||
|
return Response({'detail': 'پارامتر sort اشتباه است'}, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
orders = orders.order_by(sort)
|
||||||
|
paginator = self.pagination_class()
|
||||||
|
paginated_orders = paginator.paginate_queryset(orders, request)
|
||||||
|
orders_ser = self.serializer_class(instance=paginated_orders, many=True, context={'request': request})
|
||||||
|
return paginator.get_paginated_response(orders_ser.data)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from .models import *
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
from django.contrib.auth.models import AnonymousUser
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -49,6 +49,7 @@ class ProductVariantSerialzier(serializers.ModelSerializer):
|
|||||||
in_pack_items = InPackItemsSerialzier(many=True)
|
in_pack_items = InPackItemsSerialzier(many=True)
|
||||||
images = ProductImageSerailizer(many=True)
|
images = ProductImageSerailizer(many=True)
|
||||||
details = ProductDetailSerializer(many=True, read_only=True)
|
details = ProductDetailSerializer(many=True, read_only=True)
|
||||||
|
cart_quantity = serializers.SerializerMethodField()
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ProductVariant
|
model = ProductVariant
|
||||||
exclude = ('min_price', 'sell', 'currency', 'product', 'input_price')
|
exclude = ('min_price', 'sell', 'currency', 'product', 'input_price')
|
||||||
@@ -60,6 +61,11 @@ class ProductVariantSerialzier(serializers.ModelSerializer):
|
|||||||
if view_type == 'list':
|
if view_type == 'list':
|
||||||
self.fields.pop('in_pack_items', None)
|
self.fields.pop('in_pack_items', None)
|
||||||
|
|
||||||
|
def get_cart_quantity(self, obj):
|
||||||
|
request = self.context.get('request')
|
||||||
|
if not request or not request.user.is_authenticated:
|
||||||
|
return 0
|
||||||
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -135,7 +141,7 @@ class DynamicProductSerializer(serializers.ModelSerializer):
|
|||||||
many=True,
|
many=True,
|
||||||
context={
|
context={
|
||||||
'view_type': 'list',
|
'view_type': 'list',
|
||||||
'dollor_price': self.context.get('dollor_price')
|
'request': self.context.get('request')
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
return serializer.data
|
return serializer.data
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ class AllCategories(APIView):
|
|||||||
class ProductView(APIView):
|
class ProductView(APIView):
|
||||||
serializer_class = DynamicProductSerializer
|
serializer_class = DynamicProductSerializer
|
||||||
permission_classes = [AllowAny]
|
permission_classes = [AllowAny]
|
||||||
authentication_classes = []
|
# authentication_classes = []
|
||||||
def get(self, request, pk):
|
def get(self, request, pk):
|
||||||
product = get_object_or_404(ProductModel, id=pk)
|
product = get_object_or_404(ProductModel, id=pk)
|
||||||
product_ser = self.serializer_class(instance=product, many=False, context={'request': request, 'view_type': 'instance'})
|
product_ser = self.serializer_class(instance=product, many=False, context={'request': request, 'view_type': 'instance'})
|
||||||
|
|||||||
Reference in New Issue
Block a user