使用出生日期过滤Django模型中的人员

1 投票
1 回答
1143 浏览
提问于 2025-04-18 04:48

我有一个这样的模型:

class People(models.Model):
    """
    People model
    """
    name = models.CharField(max_length=120)
    birth_date = models.DateField()

我想根据给定的年龄参数来筛选所有人,比如说:

min_age = 24
# Filter people older than  ´min_age´
people = People.objects.filter(birth_date__lte = (#something here to filter with age))

我该怎么做呢?

1 个回答

2

你需要检查一个最大允许的出生日期,也就是datetime.date。如果有人在这个日期之后出生,那他们就会比最小年龄小:

from datetime import date

min_age = 24
max_date = date.today()
try:
    max_date = max_date.replace(year=max_date.year - min_age)
except ValueError: # 29th of february and not a leap year
    assert max_date.month == 2 and max_date.day == 29
    max_date = max_date.replace(year=max_date.year - min_age, month=2, day=28)
people = People.objects.filter(birth_date__lte=max_date)

撰写回答