Является ли хорошей практикой вызывать объект и повторно присваивать ему значение в Python/Django?

views.py

from rest_framework import views
from rest_framework.response import Response
from .models import Category
from .services.get_categories import cached_categories
from .serializers import CategorySerializer

class CategoryTreeList(views.APIView):

    def get(self, request, format=None):
        queryset = Category.objects.all()
        cached_categories(queryset)
        serializer = CategorySerializer(cached_categories.get_cached_root_nodes(), many=True)
        return Response(serializer.data)

serializers.py

from .models import Category
from rest_framework import serializers
from .services.get_categories import cached_categories




class CategorySerializer(serializers.ModelSerializer):
    children = serializers.SerializerMethodField()

    class Meta:
        model = Category
        fields = ('id', 'name', 'children', )

    def get_children(self, obj):
        children = cached_categories.get_children(obj)
        if children:
            return CategorySerializer(children, many=True).data
        else:
            return []

get_categories.py

from ..models import Category


class CachedCategories:
    def __init__(self):
        self.queryset = None

    def __call__(self, queryset):
        self.queryset = queryset

    def split_on_dicts(self):
        objects_by_depth = {}
        for i in [obj.depth for obj in self.queryset]:
            objects_by_depth.update({f"{i}": [obj for obj in self.queryset if obj.depth == i]})

        return objects_by_depth

    def get_children(self, parent: Category):
        categories = self.split_on_dicts().get(f"{parent.depth + 1}")
        children = []
        if categories:
            for obj in categories:
                if obj.path.startswith(parent.path) and \
                        obj.depth == parent.depth + 1:
                    children.append(obj)

        return children

    def get_cached_root_nodes(self):
        return self.split_on_dicts().get("1")


cached_categories = CachedCategories()

Объясняю, что я хочу.
Я создал приложение django с вложенными категориями.
И я хотел передать категории в serializator с помощью одного запроса. И я сделал это.
Затем я понял, что мой класс CachedCategories (в get_categories.py) работает только один раз, когда я запускаю сервер и загружаю просматриваемую страницу API, но он должен работать каждый раз, когда страница перезагружается.
В конце концов мне пришло в голову, что это из-за того, что метод get() не инициирует класс CachedCategories (в get_categories.py).
И я решил переназначать значение queryset после каждой загрузки страницы (я переназначаю значение в методе get() класса CategoryTreeList в views.py). Для получения такого результата я переопределяю метод __call__ в CachedCategories (в get_categories.py).
Итак, является ли хорошей практикой вызывать объект и повторно присваивать ему значение? Может быть, есть более лаконичные способы решить мою проблему?

Вернуться на верх