0

我正在尝试使用过滤器对日期和表示年份的整数组合的请求,但在执行此操作时遇到了一些麻烦。

这是我的模型:

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() 在 timedelta 被调用时还不是一个值

提前感谢您提供任何可能有帮助的解决方案或想法

4

1 回答 1

0

这正是问题所在。您不能仅使用 ORM 进行复杂的计算。但是,您也许可以利用__year查找来简化数学运算:

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

但是,任何比这更复杂的东西,您都必须使用extra.

于 2012-06-07T17:37:48.160 回答