Найти - Пользователи
Полная версия: Как выбрать людей, согласно их возрасту?
Начало » Django » Как выбрать людей, согласно их возрасту?
1
tezro
Привет всем. Сразу к делу.

Берём самую простую моедель:
class Human(models.Model):
birth_date = models.DateField()
Задача: написать queryset для выборки всех людей, старше 20 лет и младше 30.

Подсказки: timedelta не знает о существовании годов; вычитание годов для подстановки в условие выборки не учитываыет людей, которым уже исполнилось 30, тем более не учитывает високосные года; создать readonly поле, которое обновляется постоянно при обращении к объекту (в поле пишется расчётный возраст) - слишком затратный, хотя и удобный вариант.

Есть идеи?
Ferroman
from django.db.models import Q
min_age = 20
max_age = 30
min_age_ago = datetime.now - min_age
max_age_ago = datetime.now - max_age
humans = Human.objects.filter(Q(birthday__lte=min_age_ego) & Q(birthday__gte=max_age_ego))
Не проверял.
tezro
Ferroman
min_age_ago = datetime.now - min_age max_age_ago = datetime.now - max_age
Ну в теории - всё верно. Но я проверял.

tezro
не учитываыет людей, которым уже исполнилось 30
То есть если вычтем 30 лет от текущей даты, например получим 27 апреля 1980-го года, то в выборку не попадут те, у кому 26-го апреля исполнилось 30.
tezro
Собсно, как оказалось, всё почти так.
        today = date.today()
date_start = date(today.year - age_max - 1, today.month, today.day) + timedelta(days=1)
date_end = date(today.year - age_min, today.month, today.day)

humans_list = Human.objects.filter(
birth_date__gt = date_start,
birth_date__lte = date_end,
)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB