category va elonlanri olish optimalashtrildi
This commit is contained in:
@@ -6,6 +6,7 @@ Welcome! This is a comprehensive Django project template designed to streamline
|
|||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
|
|
||||||
This template consists of two main components:
|
This template consists of two main components:
|
||||||
|
|
||||||
1. **CLI Tool** - Command-line interface for generating Django apps and modules
|
1. **CLI Tool** - Command-line interface for generating Django apps and modules
|
||||||
|
|||||||
@@ -5,4 +5,9 @@ from django.contrib import admin
|
|||||||
|
|
||||||
@admin.register(TypeModel)
|
@admin.register(TypeModel)
|
||||||
class TypeAdmin(ModelAdmin):
|
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"
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ from django_filters import rest_framework as filters
|
|||||||
|
|
||||||
|
|
||||||
class TypeFilter(filters.FilterSet):
|
class TypeFilter(filters.FilterSet):
|
||||||
|
filial = filters.NumberFilter(field_name="filials__id")
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = TypeModel
|
model = TypeModel
|
||||||
fields = ["name"]
|
fields = ["name", "filial"]
|
||||||
|
|||||||
21
core/apps/api/migrations/0012_typemodel_filials.py
Normal file
21
core/apps/api/migrations/0012_typemodel_filials.py
Normal 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',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -6,6 +6,12 @@ from model_bakery import baker
|
|||||||
|
|
||||||
class TypeModel(AbstractBaseModel):
|
class TypeModel(AbstractBaseModel):
|
||||||
name = models.CharField(verbose_name=_("name"), max_length=255)
|
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):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|||||||
@@ -3,9 +3,11 @@ from rest_framework import serializers
|
|||||||
|
|
||||||
|
|
||||||
class BaseTypeSerializer(serializers.ModelSerializer):
|
class BaseTypeSerializer(serializers.ModelSerializer):
|
||||||
|
filials = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = TypeModel
|
model = TypeModel
|
||||||
fields = ["id", "name"]
|
fields = ["id", "name", "filials"]
|
||||||
|
|
||||||
|
|
||||||
class ListTypeSerializer(BaseTypeSerializer):
|
class ListTypeSerializer(BaseTypeSerializer):
|
||||||
@@ -17,5 +19,11 @@ class RetrieveTypeSerializer(BaseTypeSerializer):
|
|||||||
|
|
||||||
|
|
||||||
class CreateTypeSerializer(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):
|
class Meta(BaseTypeSerializer.Meta):
|
||||||
fields = ["id", "name"]
|
fields = ["id", "name", "filials"]
|
||||||
|
|||||||
@@ -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.products import ProductsView
|
||||||
from core.apps.api.views.type import TypeView
|
from core.apps.api.views.type import TypeView
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
router = DefaultRouter()
|
router = DefaultRouter()
|
||||||
router.register("filials", FilialView, basename="filial")
|
router.register("filials", FilialView, basename="filial")
|
||||||
router.register("categories", CategoryView, basename="category")
|
router.register("categories", CategoryView, basename="category")
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from core.apps.api.models import TypeModel
|
from core.apps.api.models import TypeModel
|
||||||
from core.apps.api.serializers.type import RetrieveTypeSerializer, ListTypeSerializer, CreateTypeSerializer
|
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.viewsets import ReadOnlyModelViewSet
|
||||||
from rest_framework.permissions import AllowAny
|
from rest_framework.permissions import AllowAny
|
||||||
from drf_spectacular.utils import extend_schema
|
from drf_spectacular.utils import extend_schema
|
||||||
@@ -8,9 +9,10 @@ from django_core.mixins import BaseViewSetMixin
|
|||||||
|
|
||||||
@extend_schema(tags=["type"])
|
@extend_schema(tags=["type"])
|
||||||
class TypeView(BaseViewSetMixin, ReadOnlyModelViewSet):
|
class TypeView(BaseViewSetMixin, ReadOnlyModelViewSet):
|
||||||
queryset = TypeModel.objects.all()
|
queryset = TypeModel.objects.prefetch_related("filials").all()
|
||||||
serializer_class = ListTypeSerializer
|
serializer_class = ListTypeSerializer
|
||||||
permission_classes = [AllowAny]
|
permission_classes = [AllowAny]
|
||||||
|
filterset_class = TypeFilter
|
||||||
|
|
||||||
action_permission_classes = {}
|
action_permission_classes = {}
|
||||||
action_serializer_class = {
|
action_serializer_class = {
|
||||||
|
|||||||
Reference in New Issue
Block a user