category va elonlanri olish optimalashtrildi

This commit is contained in:
2026-04-02 10:49:28 +05:00
parent 2dee1cc1e6
commit 8f6cf5dae3
8 changed files with 52 additions and 5 deletions

View File

@@ -6,6 +6,7 @@ Welcome! This is a comprehensive Django project template designed to streamline
## Overview
This template consists of two main components:
1. **CLI Tool** - Command-line interface for generating Django apps and modules

View File

@@ -5,4 +5,9 @@ from django.contrib import admin
@admin.register(TypeModel)
class TypeAdmin(ModelAdmin):
list_display = ("id", "__str__",)
list_display = ("id", "name", "get_filials")
filter_horizontal = ("filials",)
def get_filials(self, obj):
return ", ".join(f.name for f in obj.filials.all())
get_filials.short_description = "Filiallar"

View File

@@ -3,6 +3,8 @@ from django_filters import rest_framework as filters
class TypeFilter(filters.FilterSet):
filial = filters.NumberFilter(field_name="filials__id")
class Meta:
model = TypeModel
fields = ["name"]
fields = ["name", "filial"]

View File

@@ -0,0 +1,21 @@
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('api', '0011_category_type_cleanup'),
]
operations = [
migrations.AddField(
model_name='typemodel',
name='filials',
field=models.ManyToManyField(
blank=True,
related_name='types',
to='api.filialmodel',
verbose_name='filials',
),
),
]

View File

@@ -6,6 +6,12 @@ from model_bakery import baker
class TypeModel(AbstractBaseModel):
name = models.CharField(verbose_name=_("name"), max_length=255)
filials = models.ManyToManyField(
"api.FilialModel",
verbose_name=_("filials"),
related_name="types",
blank=True,
)
def __str__(self):
return self.name

View File

@@ -3,9 +3,11 @@ from rest_framework import serializers
class BaseTypeSerializer(serializers.ModelSerializer):
filials = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = TypeModel
fields = ["id", "name"]
fields = ["id", "name", "filials"]
class ListTypeSerializer(BaseTypeSerializer):
@@ -17,5 +19,11 @@ class RetrieveTypeSerializer(BaseTypeSerializer):
class CreateTypeSerializer(BaseTypeSerializer):
filials = serializers.PrimaryKeyRelatedField(
many=True,
queryset=TypeModel._meta.get_field("filials").related_model.objects.all(),
required=False,
)
class Meta(BaseTypeSerializer.Meta):
fields = ["id", "name"]
fields = ["id", "name", "filials"]

View File

@@ -5,6 +5,8 @@ from core.apps.api.views.category import FilialView, CategoryView, SubcategoryVi
from core.apps.api.views.products import ProductsView
from core.apps.api.views.type import TypeView
router = DefaultRouter()
router.register("filials", FilialView, basename="filial")
router.register("categories", CategoryView, basename="category")

View File

@@ -1,5 +1,6 @@
from core.apps.api.models import TypeModel
from core.apps.api.serializers.type import RetrieveTypeSerializer, ListTypeSerializer, CreateTypeSerializer
from core.apps.api.filters.type import TypeFilter
from rest_framework.viewsets import ReadOnlyModelViewSet
from rest_framework.permissions import AllowAny
from drf_spectacular.utils import extend_schema
@@ -8,9 +9,10 @@ from django_core.mixins import BaseViewSetMixin
@extend_schema(tags=["type"])
class TypeView(BaseViewSetMixin, ReadOnlyModelViewSet):
queryset = TypeModel.objects.all()
queryset = TypeModel.objects.prefetch_related("filials").all()
serializer_class = ListTypeSerializer
permission_classes = [AllowAny]
filterset_class = TypeFilter
action_permission_classes = {}
action_serializer_class = {