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
|
||||
|
||||
|
||||
This template consists of two main components:
|
||||
|
||||
1. **CLI Tool** - Command-line interface for generating Django apps and modules
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"]
|
||||
|
||||
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):
|
||||
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
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user