added new fields
This commit is contained in:
@@ -30,7 +30,7 @@ class OrderSerializer(serializers.ModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Order
|
model = Order
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'order_number', 'total_price', 'user', 'payment_type', 'delivery_type',
|
'id', 'order_number', 'status', 'total_price', 'user', 'payment_type', 'delivery_type',
|
||||||
'delivery_price', 'contact_number', 'comment', 'name', 'items', 'created_at'
|
'delivery_price', 'contact_number', 'comment', 'name', 'items', 'created_at'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ class AdminProductListSerializer(serializers.ModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Product
|
model = Product
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'name_uz', 'name_ru', 'image', 'category', 'price', 'description_uz', 'description_ru', 'unity', 'tg_id', 'code', 'article', 'quantity_left', 'min_quantity', 'code',
|
'id', 'name_uz', 'name_ru', 'is_active', 'image', 'category', 'price', 'description_uz', 'description_ru', 'unity', 'tg_id', 'code', 'article', 'quantity_left', 'min_quantity', 'code',
|
||||||
]
|
]
|
||||||
|
|
||||||
def get_category(self, obj):
|
def get_category(self, obj):
|
||||||
@@ -21,7 +21,7 @@ class ProductSerializer(serializers.ModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Product
|
model = Product
|
||||||
fields = [
|
fields = [
|
||||||
'name_uz', 'name_ru', 'image', 'category', 'price', 'description_uz', 'description_ru', 'unity', 'tg_id', 'code', 'article', 'quantity_left', 'min_quantity'
|
'name_uz', 'name_ru', 'is_active', 'image', 'category', 'price', 'description_uz', 'description_ru', 'unity', 'tg_id', 'code', 'article', 'quantity_left', 'min_quantity'
|
||||||
]
|
]
|
||||||
extra_kwargs = {
|
extra_kwargs = {
|
||||||
'image': {'required':False},
|
'image': {'required':False},
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from core.apps.orders.models import Order
|
|||||||
|
|
||||||
class OrderListApiView(generics.GenericAPIView):
|
class OrderListApiView(generics.GenericAPIView):
|
||||||
serializer_class = OrderSerializer
|
serializer_class = OrderSerializer
|
||||||
queryset = Order.objects.select_related('user').prefetch_related('items', 'items__product').order_by('order_number')
|
queryset = Order.objects.select_related('user').prefetch_related('items', 'items__product').order_by('status', 'order_number')
|
||||||
permission_classes = [IsAdminUser]
|
permission_classes = [IsAdminUser]
|
||||||
|
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
|
|||||||
@@ -10,5 +10,5 @@ class OrderItemInline(admin.TabularInline):
|
|||||||
|
|
||||||
@admin.register(Order)
|
@admin.register(Order)
|
||||||
class OrderAdmin(admin.ModelAdmin):
|
class OrderAdmin(admin.ModelAdmin):
|
||||||
list_display = ['id', 'user', 'total_price']
|
list_display = ['id', 'user', 'total_price', 'status']
|
||||||
inlines = [OrderItemInline]
|
inlines = [OrderItemInline]
|
||||||
18
core/apps/orders/migrations/0011_order_status.py
Normal file
18
core/apps/orders/migrations/0011_order_status.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 5.2 on 2025-11-21 16:35
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('orders', '0010_remove_order_address'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='order',
|
||||||
|
name='status',
|
||||||
|
field=models.CharField(choices=[('NEW', 'yangi'), ('DONE', 'tayyor')], default='NEW', max_length=20),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -15,6 +15,10 @@ class Order(BaseModel):
|
|||||||
('DELIVERY_COURIES', 'kuryer orqali yetkazib berish'),
|
('DELIVERY_COURIES', 'kuryer orqali yetkazib berish'),
|
||||||
('PICKUP', 'olib ketish'),
|
('PICKUP', 'olib ketish'),
|
||||||
)
|
)
|
||||||
|
STATUS = (
|
||||||
|
('NEW', 'yangi'),
|
||||||
|
('DONE', 'tayyor'),
|
||||||
|
)
|
||||||
|
|
||||||
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')
|
||||||
@@ -25,6 +29,7 @@ class Order(BaseModel):
|
|||||||
contact_number = models.CharField(max_length=15, null=True, blank=True)
|
contact_number = models.CharField(max_length=15, null=True, blank=True)
|
||||||
comment = models.CharField(max_length=500, null=True, blank=True)
|
comment = models.CharField(max_length=500, null=True, blank=True)
|
||||||
name = models.CharField(max_length=200, null=True, blank=True)
|
name = models.CharField(max_length=200, null=True, blank=True)
|
||||||
|
status = models.CharField(max_length=20, choices=STATUS, default='NEW')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f'{self.user} order'
|
return f'{self.user} order'
|
||||||
|
|||||||
@@ -88,6 +88,6 @@ class OrderListSerializer(serializers.ModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Order
|
model = Order
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'order_number', 'total_price', 'payment_type', 'delivery_type', 'delivery_price',
|
'id', 'order_number', 'status', 'total_price', 'payment_type', 'delivery_type', 'delivery_price',
|
||||||
'contact_number', 'comment', 'name', 'items', 'created_at'
|
'contact_number', 'comment', 'name', 'items', 'created_at'
|
||||||
]
|
]
|
||||||
@@ -7,7 +7,7 @@ from core.apps.orders.serializers import order as serializers
|
|||||||
|
|
||||||
class OrderCreateApiView(generics.GenericAPIView):
|
class OrderCreateApiView(generics.GenericAPIView):
|
||||||
serializer_class = serializers.OrderCreateSerializer
|
serializer_class = serializers.OrderCreateSerializer
|
||||||
queryset = Order.objects.all()
|
queryset = Order.objects.order_by('status')
|
||||||
permission_classes = [permissions.IsAuthenticated]
|
permission_classes = [permissions.IsAuthenticated]
|
||||||
|
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
|
|||||||
18
core/apps/products/migrations/0011_product_is_active.py
Normal file
18
core/apps/products/migrations/0011_product_is_active.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 5.2 on 2025-11-21 16:41
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('products', '0010_product_min_quantity'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='product',
|
||||||
|
name='is_active',
|
||||||
|
field=models.BooleanField(default=True),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -27,6 +27,7 @@ class Product(BaseModel):
|
|||||||
code = models.CharField(max_length=200, null=True, blank=True)
|
code = models.CharField(max_length=200, null=True, blank=True)
|
||||||
quantity_left = models.PositiveBigIntegerField(default=0)
|
quantity_left = models.PositiveBigIntegerField(default=0)
|
||||||
min_quantity = models.FloatField(null=True)
|
min_quantity = models.FloatField(null=True)
|
||||||
|
is_active = models.BooleanField(default=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ class ProductListSerializer(serializers.ModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = Product
|
model = Product
|
||||||
fields = [
|
fields = [
|
||||||
'id', 'name', 'image', 'price', 'description', 'liked', 'unity', 'min_quantity'
|
'id', 'name', 'image', 'price', 'description', 'liked', 'unity', 'min_quantity', 'is_active'
|
||||||
]
|
]
|
||||||
|
|
||||||
def get_liked(self, obj):
|
def get_liked(self, obj):
|
||||||
|
|||||||
@@ -9,14 +9,14 @@ from core.apps.products.serializers import product as serializers
|
|||||||
|
|
||||||
class ProductListApiView(generics.GenericAPIView):
|
class ProductListApiView(generics.GenericAPIView):
|
||||||
serializer_class = serializers.ProductListSerializer
|
serializer_class = serializers.ProductListSerializer
|
||||||
queryset = Product.objects.select_related('unity').order_by('name')
|
queryset = Product.objects.filter(is_active=True).select_related('unity').order_by('name')
|
||||||
permission_classes = []
|
permission_classes = []
|
||||||
filter_backends = [filters.SearchFilter]
|
filter_backends = [filters.SearchFilter]
|
||||||
search_fields = ['name']
|
search_fields = ['name']
|
||||||
|
|
||||||
def get(self, request, category_id):
|
def get(self, request, category_id):
|
||||||
category = get_object_or_404(Category, id=category_id)
|
category = get_object_or_404(Category, id=category_id)
|
||||||
products = Product.objects.filter(category=category).select_related('unity').distinct()\
|
products = Product.objects.filter(category=category, is_active=True).select_related('unity').distinct()\
|
||||||
.order_by('name')
|
.order_by('name')
|
||||||
page = self.paginate_queryset(self.filter_queryset(products))
|
page = self.paginate_queryset(self.filter_queryset(products))
|
||||||
if page is not None:
|
if page is not None:
|
||||||
@@ -28,7 +28,7 @@ class ProductListApiView(generics.GenericAPIView):
|
|||||||
|
|
||||||
class ProductsApiView(generics.GenericAPIView):
|
class ProductsApiView(generics.GenericAPIView):
|
||||||
serializer_class = serializers.ProductListSerializer
|
serializer_class = serializers.ProductListSerializer
|
||||||
queryset = Product.objects.select_related('unity')
|
queryset = Product.objects.select_related('unity').filter(is_active=True)
|
||||||
permission_classes = []
|
permission_classes = []
|
||||||
|
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
|
|||||||
Reference in New Issue
Block a user