【问题标题】:django request with two date field带有两个日期字段的 django 请求
【发布时间】:2012-06-11 17:04:19
【问题描述】:

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

这是我的模型:

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

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

【问题讨论】:

    标签: python django date filter request


    【解决方案1】:

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

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

    不过,任何比这更复杂的东西,你都必须使用extra

    【讨论】:

    • 感谢您的回答,我试图只关注年份:exs = Example.objects.filter(date_field__year__lt=0-F('year_field')+datetime.datetime.today().year ) 但是得到一个错误:“不允许在字段 'date_verif' 上加入。你是否拼错了查找类型的 'year'?”无论如何,我必须照顾好整个日期,因为这里的月份和日期很重要,所以我想我会多做一些,但由于我必须将它部署到另一个数据库系统,所以我必须适应它...再次感谢
    • 所以,经过简短的研究,我发现:code.djangoproject.com/ticket/10911
    猜你喜欢
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多