2017-02-14 2 views
-1

У меня вопрос о моем скрипте. Я хочу знать всех людей, которые имеют более 16 лет из моей базы данных. Я хочу проверить это, когда пользователь запускает функцию.Сравнение datetime с объектами дня рождения Django

У меня есть эта функция:

def Recensement_array(request) : 

    date = datetime.now().year 
    print date # I get year from now 

    birthday = Identity.objects.values_list('birthday', flat=True) # Return list with all birthday values 

    for element in birthday : 
     if date - element < 117 : 
      print "ok < 117" 

     else : 
      print "ok > 117" 

От print date я получаю:

2017

От print birthday я получаю:

<QuerySet [datetime.date(1991, 12, 23), datetime.date(1900, 9, 12), datetime.date(1900, 9, 12), datetime.date(1900, 9, 12), datetime.date(1900, 9, 12), datetime.date(1089, 9, 22), datetime.date(1900, 9, 12), datetime.date(1900, 9, 12), datetime.date(1089, 9, 22), datetime.date(1089, 9, 22), datetime.date(1089, 9, 22), datetime.date(1089, 9, 22), datetime.date(1990, 12, 12)]> 

Так что моя цель состоит в вычитать дату с день рождения и сравнить, если date - birthday = 16 years, я печатаю элемент, иначе ничего.

я получаю две проблемы:

  • Как извлечь только year из birthday?
  • Тогда метод сравнения находится между int и tuple до настоящего времени. Если бы я мог извлечь только год с рождения, он должен работать правильно?

Спасибо

EDIT:

Например, я хочу, чтобы все люди, которые имели 16 лет с момента начале этого года или получит 16 лет до первого года:

def Recensement_array(request) : 

    today = datetime.now() 
    age_16 = (today - relativedelta(years=16)) 

    result = Identity.objects.filter(birthday__range=[age_16, today]).order_by('lastname') 

    paginator = Paginator(result, 3) 
    page = request.GET.get('page', 1) 

    try: 
     result = paginator.page(page) 
    except PageNotAnInteger: 
     result = paginator.page(1) 
    except EmptyPage: 
     result = paginator.page(paginator.num_pages) 

    context = { 
    "Identity":Identity, 
    "age_16":age_16, 
    "datetime" : datetime, 
    "result" : result, 
    "PageNotAnInteger":PageNotAnInteger, 
    } 


    return render(request, 'Recensement_resume.html', context) 
+0

Возможный дубликат [Как запросить из базы данных по возрасту в Django, когда день рождения хранится в виде полей year/month/day] (http://stackoverflow.com/questions/25474545/how-to-query- from-the-db-by-age-in-django-when-birthday-is-stored-as-year-month) – Sayse

+0

@Sayse Это не решает мою проблему, или я не понимаю, между вашей ссылкой и моей проблемой – Deadpool

+0

«Я хочу знать всех людей, которые имеют более 16 лет из моей базы данных». - Он делает именно то, что вы заявляете – Sayse

ответ

1

Если вам нужно фильтровать записи с некоторыми конкретный год вы можете просто использовать __year метод поля даты:

age_16 = (today - relativedelta(years=16)) 
result = Identity.objects.filter(birthday__year=age_16.year).order_by‌​('last‌​name') 
+0

Как я уже говорил, он работает хорошо. Я могу получить список 16-летних людей в 2017 году. Люди, которым уже было 16 лет, и люди, которым до 31 декабря 2017 года исполнится 16 лет – Deadpool

Смежные вопросы