2012-06-07 61 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