Нужна помощь в оптимизации seriliazer
У меня есть следующая модель ProductCategory.
class ProductCategory(Model):
name = CharField(max_length=200)
parent_category = ForeignKey(
"ProductCategory",
related_name='child_categories',
on_delete=CASCADE,
blank=True,
null=True,
)
is_base_category = BooleanField(default=True)
У меня есть следующий ProductCategorySerializer.
class ProductCategorySerializer(serializers.ModelSerializer):
children = serializers.SerializerMethodField(read_only=True)
@staticmethod
def setup_eager_loading(queryset):
# Prefetch for subsets of relationships
queryset = queryset.prefetch_related(
'parent_category',
Prefetch(
'child_categories',
queryset=ProductCategory.objects.prefetch_related(
'child_categories',
)
),
).filter(
is_base_category=True
).order_by(
'name'
)
return queryset
def get_children(self, category):
return [{
'name': c.name,
'id': c.id,
'children': self.get_children(c),
'is_base_category': c.is_base_category,
'parent_category': category.id,
'grandparent_category': category.parent_category.id if category.parent_category else None,
} for c in category.child_categories.order_by('name')]
class Meta:
model = ProductCategory
fields = (
'id',
'name',
'is_base_category',
'children',
'parent_category',
)
Только для верхней родительской категории будет is_base_category=True
. Вышеуказанный сериализатор выполняется от 10 до 15 секунд. Могу ли я как-то оптимизировать вышеуказанный сериализатор. Или есть другие предложения?