2014-04-29 22 views
1

我有这样的模式:筛选人

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)) 

我该怎么办那?

回答

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) 
+0

这是一个很好的方式做,但工作如果在max_date上替换year,则必须使用新值将其分配给max_date: 'max_date = max_date.replace(year = max_date.year - min_age)' 或max_date将继续存储'date.today()值。 感谢您的回答。 – carlosj2585

+0

哇我现在觉得这么愚蠢:/实际上从我自己的源代码中拉出这个例子,这么多测试... – knbk