From 590eac57e7b2aade135253bd4d858523baa38431 Mon Sep 17 00:00:00 2001 From: behruz-dev Date: Wed, 3 Sep 2025 15:43:19 +0500 Subject: [PATCH] add: add laguage to unity --- core/apps/admin_panel/serializers/category.py | 2 +- core/apps/admin_panel/serializers/product.py | 9 ++-- core/apps/admin_panel/serializers/unity.py | 2 +- core/apps/admin_panel/urls.py | 9 ++++ core/apps/admin_panel/views/category.py | 4 +- core/apps/admin_panel/views/product.py | 48 ++++++++++++++++++- core/apps/products/admin/product.py | 2 +- .../0004_unity_name_ru_unity_name_uz.py | 23 +++++++++ core/apps/products/translation/product.py | 9 +++- 9 files changed, 97 insertions(+), 11 deletions(-) create mode 100644 core/apps/products/migrations/0004_unity_name_ru_unity_name_uz.py diff --git a/core/apps/admin_panel/serializers/category.py b/core/apps/admin_panel/serializers/category.py index 520866e..40d4b63 100644 --- a/core/apps/admin_panel/serializers/category.py +++ b/core/apps/admin_panel/serializers/category.py @@ -7,5 +7,5 @@ class CategorySerializer(serializers.ModelSerializer): class Meta: model = Category fields = [ - 'id', 'name' + 'id', 'name_uz', 'name_ru', 'image' ] diff --git a/core/apps/admin_panel/serializers/product.py b/core/apps/admin_panel/serializers/product.py index 24993fc..5101058 100644 --- a/core/apps/admin_panel/serializers/product.py +++ b/core/apps/admin_panel/serializers/product.py @@ -7,7 +7,7 @@ class ProductListSerializer(serializers.ModelSerializer): class Meta: model = Product fields = [ - 'id', 'name', 'image', 'category', 'price', 'description', 'unity' + 'id', 'name_uz', 'name_ru', 'image', 'category', 'price', 'description_uz', 'description_ru', 'unity' ] def get_category(self, obj): @@ -17,9 +17,10 @@ class ProductListSerializer(serializers.ModelSerializer): } -class ProductCreateSerializer(serializers.ModelSerializer): +class ProductSerializer(serializers.ModelSerializer): class Meta: model = Product fields = [ - 'name', 'image', 'category', 'price', 'description', 'unity' - ] \ No newline at end of file + 'name_uz', 'name_ru', 'image', 'category', 'price', 'description_uz', 'description_ru', 'unity' + ] + diff --git a/core/apps/admin_panel/serializers/unity.py b/core/apps/admin_panel/serializers/unity.py index 04b5659..c7ece84 100644 --- a/core/apps/admin_panel/serializers/unity.py +++ b/core/apps/admin_panel/serializers/unity.py @@ -7,5 +7,5 @@ class UnitySerializer(serializers.ModelSerializer): class Meta: model = Unity fields = [ - 'id', 'name' + 'id', 'name_uz', 'name_ru' ] \ No newline at end of file diff --git a/core/apps/admin_panel/urls.py b/core/apps/admin_panel/urls.py index 48523ba..9edfd5d 100644 --- a/core/apps/admin_panel/urls.py +++ b/core/apps/admin_panel/urls.py @@ -4,6 +4,7 @@ from core.apps.admin_panel.views import user as user_views 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 @@ -44,4 +45,12 @@ urlpatterns = [ path('/delete/', category_views.CategoryDeleteApiView.as_view()), ] )), + path('product/', include( + [ + path('create/', product_views.ProductCreateApiView.as_view()), + path('list/', product_views.ProductListApiView.as_view()), + # path('/update/', product_views..as_view()), + path('/delete/', product_views.ProductDeleteApiView.as_view()), + ] + )), ] \ No newline at end of file diff --git a/core/apps/admin_panel/views/category.py b/core/apps/admin_panel/views/category.py index 5f5d208..713d481 100644 --- a/core/apps/admin_panel/views/category.py +++ b/core/apps/admin_panel/views/category.py @@ -1,6 +1,6 @@ from django.shortcuts import get_object_or_404 -from rest_framework import generics, views, permissions, status +from rest_framework import generics, views, permissions, status, parsers from core.apps.shared.mixins.response import ResponseMixin from core.apps.products.models import Category @@ -23,6 +23,7 @@ class CategoryCreateApiView(generics.GenericAPIView, ResponseMixin): serializer_class = CategorySerializer queryset = Category.objects.all() permission_classes = [permissions.IsAdminUser] + parser_classes = [parsers.FormParser, parsers.MultiPartParser] def post(self, request): serializer = self.serializer_class(data=request.data) @@ -51,6 +52,7 @@ class CategoryUpdateApiView(generics.GenericAPIView, ResponseMixin): serializer_class = CategorySerializer queryset = Category.objects.all() permission_classes = [permissions.IsAdminUser] + parser_classes = [parsers.FormParser, parsers.MultiPartParser] def patch(self, request, id): category = get_object_or_404(Category, id=id) diff --git a/core/apps/admin_panel/views/product.py b/core/apps/admin_panel/views/product.py index e252564..e8ae4e4 100644 --- a/core/apps/admin_panel/views/product.py +++ b/core/apps/admin_panel/views/product.py @@ -1,4 +1,6 @@ -from rest_framework import generics, views +from django.shortcuts import get_object_or_404 + +from rest_framework import generics, views, status, parsers from rest_framework.permissions import IsAdminUser from core.apps.admin_panel.serializers import product as serializers @@ -18,6 +20,48 @@ class ProductListApiView(generics.GenericAPIView): return self.get_paginated_response(serializer.data) -# class ProductCreateApiView(generics.GenericAPIView, ResponseMixin): +class ProductCreateApiView(generics.GenericAPIView, ResponseMixin): + serializer_class = serializers.ProductSerializer + queryset = Product.objects.all() + permission_classes = [IsAdminUser] + parser_classes = [parsers.FormParser, parsers.MultiPartParser] + + def post(self, request): + serializer = self.serializer_class(data=request.data) + if serializer.is_valid(raise_exception=True): + serializer.save() + return self.success_response( + message='mahsulot qoshildi', status_code=status.HTTP_201_CREATED + ) + return self.failure_response(message='mahsulot qoshishda hatolik', data=serializer.errors) + + +class ProductDeleteApiView(generics.GenericAPIView, ResponseMixin): + serializer_class = None + queryset = Product.objects.all() + permission_classes = [IsAdminUser] + + def delete(self, request, id): + product = get_object_or_404(Product, id=id) + product.delete() + return self.success_response( + message='product deleted', status_code=status.HTTP_204_NO_CONTENT + ) +class ProductUpdateApiView(generics.GenericAPIView, ResponseMixin): + serializer_class = serializers.ProductSerializer + queryset = Product.objects.all() + permission_classes = [IsAdminUser] + parser_classes = [parsers.FormParser, parsers.MultiPartParser] + + def patch(self, request, id): + product = get_object_or_404(Product, id=id) + serializer = self.serializer_class(data=request.data, instance=product) + if serializer.is_valid(raise_exception=True): + serializer.save() + return self.success_response( + message='mahsulot tahrirlandi', + ) + return self.failure_response(message='mahsulot tahrirlashda hatolik', data=serializer.errors) + \ No newline at end of file diff --git a/core/apps/products/admin/product.py b/core/apps/products/admin/product.py index f335fed..a0fc2c0 100644 --- a/core/apps/products/admin/product.py +++ b/core/apps/products/admin/product.py @@ -12,5 +12,5 @@ class ProductAdmin(TranslationAdmin): @admin.register(Unity) -class UnityAdmin(admin.ModelAdmin): +class UnityAdmin(TranslationAdmin): list_display = ['id', 'name'] \ No newline at end of file diff --git a/core/apps/products/migrations/0004_unity_name_ru_unity_name_uz.py b/core/apps/products/migrations/0004_unity_name_ru_unity_name_uz.py new file mode 100644 index 0000000..bc1ff06 --- /dev/null +++ b/core/apps/products/migrations/0004_unity_name_ru_unity_name_uz.py @@ -0,0 +1,23 @@ +# Generated by Django 5.2 on 2025-09-03 15:40 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('products', '0003_unity_product_unity'), + ] + + operations = [ + migrations.AddField( + model_name='unity', + name='name_ru', + field=models.CharField(max_length=200, null=True), + ), + migrations.AddField( + model_name='unity', + name='name_uz', + field=models.CharField(max_length=200, null=True), + ), + ] diff --git a/core/apps/products/translation/product.py b/core/apps/products/translation/product.py index 7873a1d..c5231d0 100644 --- a/core/apps/products/translation/product.py +++ b/core/apps/products/translation/product.py @@ -1,10 +1,17 @@ from modeltranslation import translator -from core.apps.products.models import Product +from core.apps.products.models import Product, Unity @translator.register(Product) class ProductTranslation(translator.TranslationOptions): fields = [ 'name', 'description' + ] + + +@translator.register(Unity) +class UnityTranslation(translator.TranslationOptions): + fields = [ + 'name' ] \ No newline at end of file