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)