📦jst-django-core

django-modeltranslation + drf serialzierni qulay ishlatish uchun

from django_core.serializers import AbstractTranslatedSerializer


class PostSerializer(AbstractTranslatedSerializer):
    class Meta:
        model = Post
        translated = 0 # 0 | 1 | 2 to'liq malumot pastda tushuntirilgan
        translated_fields = ["title", "desc"]
        fields = ["id", "title", "desc", "image"]
// translated o'zgaruvchisi haqida malumot serializer Meta class ichida yaratiladi

// 0 - Accep-Language ga qarab avtomatik tarjimani olib beradi
{
    "id": 1,
    "image": "https://example.com/image.jpg",
    "title": "name uz|en|ru", // auto 
    "desc": "desc uz|en|ru" // auto
}

// 1 - Barcha tildagi tarjimalarni qaytaradi: object
{
    "id": 1,
    "image": "https://example.com/image.jpg",
    "title": {
        "uz": "title uz",
        "en": "title en",
        "ru": "title ru",
    },
    "desc": {
        "uz": "desc uz",
        "en": "desc en",
        "ru": "desc ru",
    }
}
// 3 - Barcha tildagi tarjimalarni alohida fieldda qaytaradi
{
    "id": 1,
    "image": "https://example.com/image.jpg",
    "title_uz": "name uz",
    "name_en": "name en",
    "name_ru": "name ru",
    "desc_uz": "desc uz",
    "desc_en": "desc en",
    "desc_ru": "desc ru",
}

CustomPagination

from django_core.paginations import CustomPagination
from .serializers import PostSerializer
from .models import Post


class PostViewSet(ModelViewSet):
    pagination_class = CustomPagination
    queryset = Post.objects.all()
    serializer_class = PostSerializer
// Qulay custom pagination

 {
    "links": {
        "previous": "https://example.com?page=1",
        "next": "https://example.com?page=3",
    },
    "total_items": 1000,
    "total_pages": 100,
    "page_size": 10,
    "current_page": 2,
    "results": [
        {
            "id": 1,
            "image": "https://example.com/image.jpg",
            "name": "name",
            "desc": "desc"
        }
        // ... any
    ],
}

BaseViewSetMixin responslarni standartlashtirish uchun

from django_core.paginations import CustomPagination
from .serializers import PostSerializer
from .models import Post
from django_core.mixins import BaseViewSetMixin


class PostViewSet(BaseViewSetMixin, ModelViewSet):
    pagination_class = CustomPagination
    queryset = Post.objects.all()
    serializer_class = PostSerializer
// Qulay custom pagination va standartlashgan response 
// viewsetda xatolik yuz bersa avtomatik status falsa qilinadi
// va detail yuboriladi


// success response
{
    "status": true,
    "data": {
        "links": {
            "previous": "https://example.com?page=1",
            "next": "https://example.com?page=3",
        },
        "total_items": 1000,
        "total_pages": 100,
        "page_size": 10,
        "current_page": 2,
        "results": [
            {
                "id": 1,
                "image": "https://example.com/image.jpg",
                "name": "name",
                "desc": "desc"
            }
            // ... any
        ],
    }
}


// Error response

{
    "status": false,
    "detail": "Xatolik yuz berdi"
}

Last updated