Source code for services.posts.category

from typing import List

from django.db.models import QuerySet

from apps.posts.models import Post
from apps.users.models import Category
from core.settings import POSTS_CONFIGS
from services.posts.exceptions import CategoriesDontExistException, TooManyCategoriesException


[docs] class PostCategoryService: @classmethod def _validate_categories(cls, categories_ids: List[int]) -> QuerySet[Category]: categories = Category.objects.filter(pk__in=categories_ids) max_categories = POSTS_CONFIGS.get("MAX_POST_CATEGORIES", 1) if not categories.exists(): raise CategoriesDontExistException if categories.count() > max_categories: raise TooManyCategoriesException return categories
[docs] @classmethod def set_categories(cls, post: Post, categories_ids: List[int]) -> None: """ Set categories list to post instance after validation :param post: Post instance :param categories_ids: categories id list """ categories = cls._validate_categories(categories_ids) # Check is category was changed if categories.values_list("pk", flat=True) != post.categories.values_list("pk", flat=True): post.categories.set(categories)