通过django视图中的日期范围筛选记录
我试图通过视图过滤数据。我尝试了_范围和_gte+_lte,但在网站上没有结果 型号:通过django视图中的日期范围筛选记录,django,view,filter,Django,View,Filter,我试图通过视图过滤数据。我尝试了_范围和_gte+_lte,但在网站上没有结果 型号: class Change(models.Model): def __unicode__(self): return unicode(self.number) number = models.IntegerField(verbose_name="CHG") service = models.ForeignKey('organization.Service') envi
class Change(models.Model):
def __unicode__(self):
return unicode(self.number)
number = models.IntegerField(verbose_name="CHG")
service = models.ForeignKey('organization.Service')
environment = models.CharField(choices=ENV_CHOICE, max_length=20)
description = models.CharField(max_length=50)
start_date = models.DateField()
start_time = models.TimeField()
end_date = models.DateField()
end_time = models.TimeField()
assignee = models.ForeignKey('organization.Assignee')
我尝试了不同的观点:
1.
在这种情况下,当只使用开始日期时,它工作正常,但当我添加结束日期时,它不会显示任何记录
2.
在这种情况下,我得到一个错误,全局名称start_date没有定义
非常感谢您的帮助。问题是您不了解
范围查找是如何工作的。
它是这样使用的:
Change.objects.filter(change_field__range=[start_datatime, end_datetime])
其中,change\u field
是要查询的change
模型的日期时间或日期字段start\u datetime
和end\u datetime
是您提供的日期时间对象。例如:
class Change(models.Mode):
...
published = models.DateTimeField()
...
因此,您的查询可能如下所示
Change.objects.filter(published__range=[datetime.datetime(2011, 2, 4), datetime.datetime(2011, 5,4)])
这将返回带有Change
对象的queryset,这些对象是在2011-2-4
和2011-5-4
之间发布的。在我看来,在您的上述代码中,开始日期和结束日期之间的时间差(开始日期和结束日期之间的差)是0。如果您的开始和结束日期相同,您应该像这样在结束时间中添加一些timedelta
def home(request):
changes = Change.objects.all().filter(start_date__gte=datetime.date.today(), \
end_date__lte=datetime.date.today() + datetime.timedelta(seconds=86400))
return render(request, 'index.html', {'changes' : changes})
你想从你的数据中得到什么结果?你能举个例子吗。@W我想查询一下变更数据库中的所有记录,看看今天是否有任何变更。有时,更改计划超过一天,所以我希望在网站上列出它,直到计划的结束日期。例如编号=765432,开始日期=2015年11月19日,结束日期=2015年11月22日。。。在日期范围内(19,20,21,22),我想在网站上显示它。提前非常感谢。我试图将其更改为添加时间增量,但不幸的是,它没有返回任何结果。开始日期=2015-11-19和结束日期=2015-11-22。数据库中的日期格式是否与您在查询中填写的日期格式相同,即yy-mm-dd?是的。奇怪的是,如果我只在过滤器中使用start_date_ugte=datetime.date.today(),它就可以工作了。它显示大于或等于今天日期的记录,但当我想用结束日期限制它时,不会显示任何记录。开始日期和结束日期都是models.DateField().Sweet,但我希望更改为与今天相同(这意味着它将每天动态分配。这就是为什么我认为我可以在视图中定义变量并将其传递给Change.objects.filter。然后我希望有一个datetime对象来定义范围,它们来自数据库(start_date和end_date)我不想提供静态值。@hplodur,change\u field
是一个字段,而不是一个值,如果没有字段,您无法筛选对象,因此您不会按照自己的意愿进行筛选。您需要做的是创建一个范围,其中start\u datetime
是当前一天的开始,end\u datetime
是一天的结束这里是如何存档的。那么,如何查询具有有效起始日期和有效截止日期的价格数据表?我想为参考日期(如今天的日期)找到有效价格,您将如何处理?
Change.objects.filter(published__range=[datetime.datetime(2011, 2, 4), datetime.datetime(2011, 5,4)])
def home(request):
changes = Change.objects.all().filter(start_date__gte=datetime.date.today(), \
end_date__lte=datetime.date.today() + datetime.timedelta(seconds=86400))
return render(request, 'index.html', {'changes' : changes})