diff --git a/README.MD b/README.MD index c6e43f8..1d4aa54 100644 --- a/README.MD +++ b/README.MD @@ -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 diff --git a/core/apps/api/admin/type.py b/core/apps/api/admin/type.py index 19460f0..3b5738c 100644 --- a/core/apps/api/admin/type.py +++ b/core/apps/api/admin/type.py @@ -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" diff --git a/core/apps/api/filters/type.py b/core/apps/api/filters/type.py index 7bf6b06..160a220 100644 --- a/core/apps/api/filters/type.py +++ b/core/apps/api/filters/type.py @@ -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"] diff --git a/core/apps/api/migrations/0012_typemodel_filials.py b/core/apps/api/migrations/0012_typemodel_filials.py new file mode 100644 index 0000000..8ba9d98 --- /dev/null +++ b/core/apps/api/migrations/0012_typemodel_filials.py @@ -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', + ), + ), + ] diff --git a/core/apps/api/models/type.py b/core/apps/api/models/type.py index 306668c..d3df708 100644 --- a/core/apps/api/models/type.py +++ b/core/apps/api/models/type.py @@ -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 diff --git a/core/apps/api/serializers/type/type.py b/core/apps/api/serializers/type/type.py index ca6cbaa..b1c7fb9 100644 --- a/core/apps/api/serializers/type/type.py +++ b/core/apps/api/serializers/type/type.py @@ -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"] diff --git a/core/apps/api/urls.py b/core/apps/api/urls.py index d744793..7d3463d 100644 --- a/core/apps/api/urls.py +++ b/core/apps/api/urls.py @@ -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") diff --git a/core/apps/api/views/type.py b/core/apps/api/views/type.py index 8dedd78..b3c4786 100644 --- a/core/apps/api/views/type.py +++ b/core/apps/api/views/type.py @@ -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 = {