2014-04-29 50 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