【问题标题】:django filter older than day(s)?django过滤器超过天?
【发布时间】:2009-12-31 05:25:03
【问题描述】:

天是用户输入以获得早于(用户输入的天数)的结果的数字。例如,如果用户输入 32 天,他们将得到超过 30 天的结果。

快速试用:

class Entry(models.Model):
    entered = models.DateTimeField()

>>> from datetime import datetime
>>> Entry(entered = datetime.now()).save()
>>> Entry.objects.filter(entered__lte = datetime.now())
[<Entry: Entry object>]
>>> Entry.objects.filter(entered__gte = datetime.now())
[]
>>> Entry.objects.filter(entered__gte = datetime.now(), entered__lte=datetime(2009,11,1,0,0))
[<Entry: Entry object>]

我的问题和我的尝试

xxxx__day__lte.

last_contact_filled 来自输入字段的输入

for day_filter in xrange(1,int(last_contact_filled)+1):
                qdict['last_contact__day']=day_filter

在我的情况下,在 Django 中按天过滤的最佳方法是什么?

【问题讨论】:

    标签: django


    【解决方案1】:

    这样的东西对你有用:

    from datetime import datetime, timedelta
    how_many_days = 30
    MyObject.objects.filter(entered__gte=datetime.now()-timedelta(days=how_many_days))
    

    【讨论】:

    • 请防止本地时间错误(RuntimeWarning: DateTimeField xxx.created_at 在时区支持处于活动状态时收到一个天真的日期时间(2016-05-01 11:31:59.768065))你应该现在导入 djangos 时区功能:从 django.utils.timezone 现在导入
    • 是大于还是小于?你不需要在那里使用entered__lte=....吗?
    • @Rehmat,同意,它应该是 __lte,因为我们正在过滤 older 对象。接受的答案是错误的
    【解决方案2】:

    timedelta(-30) 添加到过滤器中的datetime

    【讨论】:

    • 不明白你要我添加什么,在哪里添加?
    • datetime.now() + timedelta(-30),例如。
    【解决方案3】:

    我们可以将 Django timezone.now() 与 timedelta 一起使用

    from datetime import timedelta
    from django.utils import timezone
    time_threshold = timezone.now() - timedelta(days=7)
    Entry.objects.filter(entered__gte=time_threshold)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 2014-01-30
      • 2016-03-11
      • 1970-01-01
      • 2021-08-29
      • 2012-06-30
      • 1970-01-01
      相关资源
      最近更新 更多