Python - Django Rest Framework - подсчет общего количества строк из таблиц в базе данных с помощью одного вызова

Я только что перешел на python и Django-rest-framework с java spring-boot, и у меня возник вопрос

Допустим, у меня есть несколько таблиц:

class table1(CommonModel):
class table2(CommonModel):
class table3(CommonModel):
class table4(CommonModel):
....

А у меня есть API для возврата общего количества строк в этих таблицах:

{
    "table1": 10,
    "table2": 10,
    "table3": 10,
    "table4": 10,
    ....
}

Мой код до сих пор состоит в подсчете общего количества в каждой таблице с помощью
. Model.objects.all().count() или Model.objects.filter(some_filter).count()

И проблема здесь очевидна, если у меня есть 10 таблиц, мне придется вызывать 10 count query, что, как мне кажется, не очень хороший способ, потому что это спамит слишком много запросов к базе данных.

Я хочу ограничить количество запросов к базе данных. Лучше всего было бы вернуть количество строк для всех таблиц в одном запросе. Я искал решение, например, создать пользовательский запрос или что-то подобное, но, похоже, ничто не решает мою проблему. Редактировать: Я использую базу данных Postgresql

class TestAPIVIew(ListAPIView):
    permission_classes = [AllowAny]

    def get(self, request, *args, **kwargs):
        data = dict()
        installed_apps = settings.INSTALLED_APPS[5:-1]

# INSTALLED_APPS are getting apps name in a array. to excludes some of the apps i have used [5:-1]
        for app in installed_apps:
            if '.' in app:
                app_names_list = app.split('.')
                app_names_list_length = len(app_names_list)
                app = app.split('.')[app_names_list_length - 1]
            app_config = apps.get_app_config(app)
            for model in app_config.get_models():
                counter = model.objects.count()
                data[model.__name__] = counter
        return Response(data=data)
Вернуться на верх