У меня большая бд, в конкретно нужной мне таблице 15млн. записей.
Мне нужно сделать фильтр по условиям.
Вот, допустим, моя функция:
spoilerdef addorgtofileinviews(filters):
if filters['country'] == "all":
orgs = Organization.objects.select_related()
else:
orgs = Organization.objects.filter(country__in=filters['country'])
if filters['region'] != "all":
orgs = orgs.filter(region__in=filters['region']) # почему то queryset создается здесь.
if filters['city'] != "all":
orgs = orgs.filter(city__in=filters['city'])
if filters['raion'] != "all":
orgs = orgs.filter(raion__in=filters['raion'])
print(orgs.count()) # Яко бы только сейчас должен создаваться queryset
Из документации написано что queryset "ленивые" и не создаются "пока вы не сделаете что-то для оценки набора запросов." То есть как бы в моем случае это "print". Но почему то это не так.
И вот два вопроса к знатокам:
1. Почему так происходит и как можно исправить?
2. Есть ли возможность как то не повторять "filter'ы" написанные мной в условиях "if", а просто как то собрать один "filter"?