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

Nil*_*Kar 2 python django django-rest-framework

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

我想在 django 中创建一个 Daterange 表单(它将包含开始日期和结束日期),用户将在其中提供他们的特定日期,并根据用户提供的日期过滤对象...

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

Wil*_*sem 6

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

class MyModel(models.Model):
    date = models.DateField()
Run Code Online (Sandbox Code Playgroud)

你可以得到所有MyModel对象之间2018-1-12018-2-9用:

from datetime import date

MyModel.objects.filter(date__range=(date(2018,1,1), date(2018, 2, 9)))
Run Code Online (Sandbox Code Playgroud)

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

class DateRangeForm(forms.Form):
    start_date = forms.DateField()
    end_date = forms.DateField()
Run Code Online (Sandbox Code Playgroud)

然后在视图中过滤,如:

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
Run Code Online (Sandbox Code Playgroud)