如何在 django 中按日期范围过滤记录?

Posted

技术标签:

【中文标题】如何在 django 中按日期范围过滤记录?【英文标题】:How to filter records by range of date in django? 【发布时间】:2019-03-10 19:42:37 【问题描述】:

我可以按用户给定的日期范围过滤记录吗?

我想在 django 中创建一个 Daterange 表单(它将包含开始日期和结束日期),用户将在其中给出他们的具体日期,它会根据用户给出的日期过滤对象...

我可以在 Django 中执行此操作吗?

【问题讨论】:

是的,开始here 看看如何按日期范围过滤。 MyModel.objects.filter(Q(datetime__lte=request.POST['end_date']) & Q(datetime__gte=request.POST['start_date']) 假设您的模型的datetimefield 称为日期时间。 @VaibhavVishal range 查找有什么问题? docs.djangoproject.com/en/2.1/ref/models/querysets/#range 【参考方案1】:

是的,假设模型看起来像:

class MyModel(models.Model):
    date = models.DateField()

您可以通过以下方式获取2018-1-12018-2-9 之间的所有MyModel 对象:

from datetime import date

MyModel.objects.filter(date__range=(date(2018,1,1), date(2018, 2, 9)))

因此,您可以使用如下形式:

class DateRangeForm(forms.Form):
    start_date = forms.DateField()
    end_date = forms.DateField()

然后在视图中过滤,如:

def my_view(request):
    if request.method == 'POST':
        form = DateRangeForm(request.POST)
        if form.is_valid():
            qs = MyModel.objects.filter(date__range=(
                form.cleaned_data['start_date'],
                form.cleaned_data['end_date']
            ))
            # do something
         else:
            # do something
            pass
    else:
        # do something
        pass

【讨论】:

是的,可以的...Thanx@Willem Van Onsem 你能告诉我如何在基于类的详细视图下做同样的事情吗?? @NiladryKar:主要思想是在查询集中,你使用my_date_field__range=(from_date, to_date),但是在详细视图中过滤本身已经很奇怪了。 OOOO 是的...我已经在基于函数的视图中完成了...再次感谢您的帮助@Willem Van Onsem

以上是关于如何在 django 中按日期范围过滤记录?的主要内容,如果未能解决你的问题,请参考以下文章

Django:如何将分隔的整数字段(年、月)连接为日期范围以过滤数据库

在 CodeIgniter 中按日期过滤 MySQL 条目

如何在搜索栏中按布尔字段过滤 - django

在Django中按日期计算记录数

如何在 Hive SQL 中按日期范围独家加入?

Django Admin:如何过滤特定范围值的整数字段