Niladry Kar
Niladry Kar

Reputation: 1203

How to filter records by range of date in django?

Can I filter records by range of date given by the user?

I want to create a Daterange form(it will contain start date and end date) in django where the user will give their specific dates and it will filter the objects based on that dates given by the user...

Can I perform this in Django?

Upvotes: 2

Views: 13414

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 476503

Yes, say the model looks like:

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

You can get all MyModel objects between 2018-1-1 and 2018-2-9 with:

from datetime import date

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

You can thus use a form like:

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

and then filter in the view like:

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

Upvotes: 6

Related Questions