add: add order apis for admin panel
This commit is contained in:
@@ -4,8 +4,18 @@ from core.apps.orders.models import Order
|
|||||||
|
|
||||||
|
|
||||||
class OrderSerializer(serializers.ModelSerializer):
|
class OrderSerializer(serializers.ModelSerializer):
|
||||||
|
user = serializers.SerializerMethodField(method_name='get_user')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Order
|
model = Order
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'order_number', 'total_price', 'user'
|
'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
|
||||||
|
}
|
||||||
@@ -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 unity as unity_views
|
||||||
from core.apps.admin_panel.views import category as category_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 product as product_views
|
||||||
|
from core.apps.admin_panel.views import order as order_views
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
@@ -54,4 +55,9 @@ urlpatterns = [
|
|||||||
path('<uuid:id>/', product_views.ProductDetailApiView.as_view()),
|
path('<uuid:id>/', product_views.ProductDetailApiView.as_view()),
|
||||||
]
|
]
|
||||||
)),
|
)),
|
||||||
|
path('order/', include(
|
||||||
|
[
|
||||||
|
path('list/', order_views.OrderListApiView.as_view()),
|
||||||
|
]
|
||||||
|
))
|
||||||
]
|
]
|
||||||
18
core/apps/admin_panel/views/order.py
Normal file
18
core/apps/admin_panel/views/order.py
Normal file
@@ -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)
|
||||||
18
core/apps/orders/migrations/0004_order_status.py
Normal file
18
core/apps/orders/migrations/0004_order_status.py
Normal file
@@ -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),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -6,17 +6,18 @@ from core.apps.products.models import Product
|
|||||||
|
|
||||||
|
|
||||||
class Order(BaseModel):
|
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)
|
total_price = models.PositiveBigIntegerField(default=0)
|
||||||
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='orders')
|
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='orders')
|
||||||
order_number = models.PositiveBigIntegerField(default=1)
|
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):
|
def __str__(self):
|
||||||
return f'{self.user} order'
|
return f'{self.user} order'
|
||||||
|
|||||||
@@ -61,5 +61,5 @@ class OrderListSerializer(serializers.ModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Order
|
model = Order
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'total_price', 'items', 'created_at'
|
'id', 'order_number', 'total_price', 'items', 'created_at'
|
||||||
]
|
]
|
||||||
Reference in New Issue
Block a user