diff --git a/config/settings/base.py b/config/settings/base.py index 3fcc280..53f7473 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -33,6 +33,7 @@ INSTALLED_APPS = [ MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', + "django.middleware.locale.LocaleMiddleware", 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', diff --git a/config/urls.py b/config/urls.py index ddd03bf..c5bc0be 100644 --- a/config/urls.py +++ b/config/urls.py @@ -31,6 +31,7 @@ urlpatterns = [ [ path('accounts/', include('core.apps.accounts.urls')), path('common/', include('core.apps.common.urls')), + path('orders/', include('core.apps.orders.urls')), ] )) ] diff --git a/core/apps/common/migrations/0003_alter_service_options.py b/core/apps/common/migrations/0003_alter_service_options.py new file mode 100644 index 0000000..4145a55 --- /dev/null +++ b/core/apps/common/migrations/0003_alter_service_options.py @@ -0,0 +1,17 @@ +# Generated by Django 5.2 on 2025-08-26 14:00 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('common', '0002_rename_siteconfir_siteconfig'), + ] + + operations = [ + migrations.AlterModelOptions( + name='service', + options={'verbose_name': 'Xizmatlar', 'verbose_name_plural': 'Xizmatlarimiz'}, + ), + ] diff --git a/core/apps/orders/admin.py b/core/apps/orders/admin.py index 8c38f3f..0c87b73 100644 --- a/core/apps/orders/admin.py +++ b/core/apps/orders/admin.py @@ -1,3 +1,9 @@ from django.contrib import admin -# Register your models here. +from core.apps.orders import models + + +@admin.register(models.Order) +class OrderAdmin(admin.ModelAdmin): + list_display = ['name', 'user', 'total_price', 'status', 'is_paid'] + list_filter = ['is_paid', 'user', 'status'] \ No newline at end of file diff --git a/core/apps/orders/migrations/0001_initial.py b/core/apps/orders/migrations/0001_initial.py new file mode 100644 index 0000000..1cfd99c --- /dev/null +++ b/core/apps/orders/migrations/0001_initial.py @@ -0,0 +1,38 @@ +# Generated by Django 5.2 on 2025-08-26 14:00 + +import django.db.models.deletion +import uuid +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Order', + fields=[ + ('id', models.UUIDField(db_index=True, default=uuid.uuid4, editable=False, primary_key=True, serialize=False, unique=True)), + ('created_at', models.DateField(auto_now_add=True)), + ('updated_at', models.DateField(auto_now=True)), + ('name', models.CharField(max_length=200)), + ('date', models.DateField()), + ('status', models.CharField(choices=[('Yetkazilmoqda', 'Yetkazilmoqda'), ('Olingan', 'Olingan'), ('Kutilmoqda', 'Kutilmoqda'), ('Yetkazib berilgan', 'Yetkazib berilgan')], max_length=20)), + ('size', models.CharField(max_length=20)), + ('total_price', models.PositiveBigIntegerField()), + ('is_paid', models.BooleanField(default=False)), + ('location', models.CharField(max_length=200)), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='orders', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'Buyurtma', + 'verbose_name_plural': 'buyurtmalar', + }, + ), + ] diff --git a/core/apps/orders/models.py b/core/apps/orders/models.py index 71a8362..552cf57 100644 --- a/core/apps/orders/models.py +++ b/core/apps/orders/models.py @@ -1,3 +1,30 @@ from django.db import models -# Create your models here. +from core.apps.common.models import BaseModel +from core.apps.accounts.models import User + + +class Order(BaseModel): + STATUS = ( + ('Yetkazilmoqda', 'Yetkazilmoqda'), + ('Olingan', 'Olingan'), + ('Kutilmoqda', 'Kutilmoqda'), + ('Yetkazib berilgan', 'Yetkazib berilgan') + ) + + user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='orders') + name = models.CharField(max_length=200) + date = models.DateField() + status = models.CharField(max_length=20, choices=STATUS) + size = models.CharField(max_length=20) + total_price = models.PositiveBigIntegerField() + is_paid = models.BooleanField(default=False) + location = models.CharField(max_length=200) + + def __str__(self): + return f'{self.user} user order {self.name}' + + class Meta: + verbose_name = 'Buyurtma' + verbose_name_plural = 'buyurtmalar' + \ No newline at end of file diff --git a/core/apps/orders/serializers.py b/core/apps/orders/serializers.py new file mode 100644 index 0000000..7acd87e --- /dev/null +++ b/core/apps/orders/serializers.py @@ -0,0 +1,11 @@ +from rest_framework import serializers + +from core.apps.orders.models import Order + + +class OrderListSerializer(serializers.ModelSerializer): + class Meta: + model = Order + fields = [ + 'id', 'name', 'date', 'status', 'size', 'total_price', 'is_paid', 'location' + ] \ No newline at end of file diff --git a/core/apps/orders/urls.py b/core/apps/orders/urls.py new file mode 100644 index 0000000..2104e54 --- /dev/null +++ b/core/apps/orders/urls.py @@ -0,0 +1,7 @@ +from django.urls import path + +from core.apps.orders import views + +urlpatterns = [ + path('order/list/', views.OrderListApiView.as_view()), +] \ No newline at end of file diff --git a/core/apps/orders/views.py b/core/apps/orders/views.py index 91ea44a..0dae399 100644 --- a/core/apps/orders/views.py +++ b/core/apps/orders/views.py @@ -1,3 +1,16 @@ -from django.shortcuts import render +from rest_framework import generics, permissions +from rest_framework.response import Response -# Create your views here. +from core.apps.orders import serializers, models + + +class OrderListApiView(generics.GenericAPIView): + serializer_class = serializers.OrderListSerializer + queryset = models.Order.objects.all() + permission_classes = [permissions.IsAuthenticated] + + def get(self, request): + user = request.user + orders = models.Order.objects.filter(user=user) + serializer = self.serializer_class(orders, many=True) + return Response(serializer.data, status=200)