Here is my solution that I think it better optimize
School.objects.annotate(
number_of_class=Subquery(
Class.objects.filter(
school_id=OuterRef("pk"),
is_deleted=False,
# Add additional filters here
).values("school_id").annotate(count=Func(F("id"), function="COUNT")).values("count")
)
)