2012-06-07 2 views
0

Я пытаюсь попробовать запрос с фильтром на комбинацию даты и целое число, которое представляет год, и я сталкиваюсь с некоторыми неприятностями в этом.запрос django с двумя полями даты

Вот моя модель:

class Exemple(models.Model): 
    date_field = models.DateField() 
    year_field = models.IntegerField() 

Вот запрос, который работа:

exs = Exemple.objects.extra(where=["DATE(date_field, '+' || year_field|| ' years') < DATE('now') OR date_field is NULL"]) 

Я хочу сделать то же запрос, используя только Джанго ОРМ, я попробовал это (что не работает)

from django.db.models import F 
import datetime 
exs = Exemple.objects.filter(date_field__lt=datetime.timedelta(days=-365*F('year_field'))+datetime.datetime.today().year) 

Я думаю, проблема в том, что F() еще не является значением в момент Мент timedelta дозвонились

Спасибо авансом для любого решения или идеи, которые могли бы помочь

ответ

0

Это именно проблема. Вы не можете делать сложные вычисления, подобные этому только с ORM. Тем не менее, вы можете быть в состоянии воспользоваться __year поиска, чтобы упростить математику:

Exemple.objects.filter(date_field__year__lt=F('year_field')) 

Все более сложным, чем это, хотя, и вы должны использовать extra.

+0

Спасибо за ваш ответ, я пытался сосредоточиться только на год: EXS = Exemple.objects.filter (. Date_field__year__lt = 0-F ('year_field') + datetime.datetime.today() год) Но получить сообщение об ошибке: «Присоединиться к полю« date_verif »не разрешено. Вы пропустили« год »для типа поиска?» В любом случае, я должен позаботиться о всей дате, потому что здесь важны месяцы и дни, поэтому я думаю, что сделаю это с дополнительным, но так как мне придется развернуть его в другую систему БД, я буду придется адаптировать его ... еще раз спасибо – BlueMagma

+0

Итак, после краткого исследования я нахожу это: https://code.djangoproject.com/ticket/10911 – BlueMagma

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