django过滤器比天更早?

kn3*_*n3l 30 django

日期是用户输入的数字,以获得比(用户输入的天数)更早的结果,例如,如果用户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>]
Run Code Online (Sandbox Code Playgroud)

我的问题和我的尝试

xxxx__day__lte.
Run Code Online (Sandbox Code Playgroud)

来自输入字段的last_contact_filled输入

for day_filter in xrange(1,int(last_contact_filled)+1):
                qdict['last_contact__day']=day_filter
Run Code Online (Sandbox Code Playgroud)

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

kib*_*zer 63

这样的东西对你有用:

from datetime import datetime, timedelta
how_many_days = 30
MyObject.objects.filter(entered__gte=datetime.now()-timedelta(days=how_many_days))
Run Code Online (Sandbox Code Playgroud)

  • 是大于还是小于?您不需要在那里使用 `entered__lte=....` 吗? (5认同)
  • 防止本机时间错误(RuntimeWarning:DateTimeField xxx.created_at收到一个天真的日期时间(2016-05-01 11:31:59.768065),而时区支持处于活动状态)你应该导入djangos timezone now function:from django.utils.timezone现在导入 (4认同)

小智 11

我们可以使用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)
Run Code Online (Sandbox Code Playgroud)