added new fields

This commit is contained in:
behruz-dev
2025-11-21 16:41:35 +05:00
parent 421f585721
commit 23d79ea85a
12 changed files with 53 additions and 11 deletions

View File

@@ -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'
] ]

View File

@@ -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},

View File

@@ -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):

View File

@@ -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]

View 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),
),
]

View File

@@ -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'

View File

@@ -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'
] ]

View File

@@ -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):

View 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),
),
]

View File

@@ -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

View File

@@ -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):

View File

@@ -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):