diff --git a/core/apps/admin_panel/serializers/order.py b/core/apps/admin_panel/serializers/order.py index b2d19c6..41e05a8 100644 --- a/core/apps/admin_panel/serializers/order.py +++ b/core/apps/admin_panel/serializers/order.py @@ -4,8 +4,18 @@ from core.apps.orders.models import Order class OrderSerializer(serializers.ModelSerializer): + user = serializers.SerializerMethodField(method_name='get_user') + class Meta: model = Order fields = [ - 'id', 'order_number', 'total_price', 'user' - ] \ No newline at end of file + 'id', 'order_number', 'status', 'total_price', 'user' + ] + + def get_user(self, obj): + return { + 'id': obj.user.id, + 'first_name': obj.user.first_name, + 'last_name': obj.user.last_name, + 'username': obj.user.username + } \ No newline at end of file diff --git a/core/apps/admin_panel/urls.py b/core/apps/admin_panel/urls.py index 730bd9f..8307398 100644 --- a/core/apps/admin_panel/urls.py +++ b/core/apps/admin_panel/urls.py @@ -5,6 +5,7 @@ from core.apps.admin_panel.views import banner as banner_views from core.apps.admin_panel.views import unity as unity_views from core.apps.admin_panel.views import category as category_views from core.apps.admin_panel.views import product as product_views +from core.apps.admin_panel.views import order as order_views urlpatterns = [ @@ -54,4 +55,9 @@ urlpatterns = [ path('/', product_views.ProductDetailApiView.as_view()), ] )), + path('order/', include( + [ + path('list/', order_views.OrderListApiView.as_view()), + ] + )) ] \ No newline at end of file diff --git a/core/apps/admin_panel/views/order.py b/core/apps/admin_panel/views/order.py new file mode 100644 index 0000000..7b66645 --- /dev/null +++ b/core/apps/admin_panel/views/order.py @@ -0,0 +1,18 @@ +from rest_framework import generics, views, status +from rest_framework.permissions import IsAdminUser + +from core.apps.shared.mixins.response import ResponseMixin +from core.apps.admin_panel.serializers.order import OrderSerializer +from core.apps.orders.models import Order + + +class OrderListApiView(generics.GenericAPIView): + serializer_class = OrderSerializer + queryset = Order.objects.select_related('user') + permission_classes = [IsAdminUser] + + def get(self, request): + page = self.paginate_queryset(self.queryset) + if page is not None: + serializer = self.serializer_class(page, many=True) + return self.get_paginated_response(serializer.data) \ No newline at end of file diff --git a/core/apps/orders/migrations/0004_order_status.py b/core/apps/orders/migrations/0004_order_status.py new file mode 100644 index 0000000..22b0bf8 --- /dev/null +++ b/core/apps/orders/migrations/0004_order_status.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2 on 2025-09-03 16:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('orders', '0003_order_order_number'), + ] + + operations = [ + migrations.AddField( + model_name='order', + name='status', + field=models.CharField(choices=[('PENDING', 'kutilmoqda'), ('PROCESSING', 'qayta ishlash'), ('SHIPPED', "jo'natilgan"), ('DELIVERED', 'yetkazib berildi'), ('CANCELLED', 'bekor qilingan')], default='kutilmoqda', max_length=20), + ), + ] diff --git a/core/apps/orders/models/order.py b/core/apps/orders/models/order.py index 8cd66a4..3336a23 100644 --- a/core/apps/orders/models/order.py +++ b/core/apps/orders/models/order.py @@ -6,17 +6,18 @@ from core.apps.products.models import Product class Order(BaseModel): - # STATUS = ( - # ('', ''), - # ('', ''), - # ('', ''), - # ('', ''), - # ('', '') - # ) + STATUS = ( + ('PENDING', 'kutilmoqda'), + ('PROCESSING', 'qayta ishlash'), + ('SHIPPED', "jo'natilgan"), + ('DELIVERED', 'yetkazib berildi'), + ('CANCELLED', 'bekor qilingan') + ) + total_price = models.PositiveBigIntegerField(default=0) user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='orders') order_number = models.PositiveBigIntegerField(default=1) - # status = models.CharField(max_length=20, choices=STATUS) + status = models.CharField(max_length=20, choices=STATUS, default='kutilmoqda') def __str__(self): return f'{self.user} order' diff --git a/core/apps/orders/serializers/order.py b/core/apps/orders/serializers/order.py index 1d50e68..98e03d4 100644 --- a/core/apps/orders/serializers/order.py +++ b/core/apps/orders/serializers/order.py @@ -61,5 +61,5 @@ class OrderListSerializer(serializers.ModelSerializer): class Meta: model = Order fields = [ - 'id', 'total_price', 'items', 'created_at' + 'id', 'order_number', 'total_price', 'items', 'created_at' ] \ No newline at end of file