2012-06-07 104 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"]) 

我想只用Django的ORM做完全相同的請求, 我想這(其沒有工作)

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()還沒有在莫MENT 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