На самом деле, если есть все параметры в request.POST
, тогда будет и такое же количество обращений к БД, равное количеству параметров. Чтобы уменьшить количество запросов к БД, я бы сделал иначе - создавал бы условия от большего к меньшему, т.е. если есть все поля в request.POST
, тогда в этом запросе к БД в фильтр включены все поля, если нет какого-то поля - то запрос без этого фильтра и т.д. Конечно, это создаст достаточно большую лесенку из проверок, но в итоге всегда будет лишь один запрос к БД с необходимыми фильтрами.
Плюс, я бы переписал подобные выражения:
if request.POST['year'] != '':
people = people.filter(birthday__year=request.POST['year'])
иначе:
year = request.POST.get('year')
if year:
people = people.filter(birthday__year=year)
Во первых, легче читать, во-вторых, меньше работы для скрипта.
И ещё, когда Вы пишите сначала people = People.objects.filter(.....)
, а потом people = people.filter(birthday__year=year)
, Вы все равно получате два обращения к БД, по каждому фильтру ;)