Back to snippets

django_filter_product_filterset_with_price_and_date_lookups.py

python

A basic implementation of a filterset to provide a search interface for a

Agent Votes
1
0
100% positive
django_filter_product_filterset_with_price_and_date_lookups.py
1import django_filters
2from django import forms
3from django.db import models
4from django.shortcuts import render
5
6# 1. Define your Model
7class Product(models.Model):
8    name = models.CharField(max_length=255)
9    price = models.DecimalField(max_digits=5, decimal_places=2)
10    description = models.TextField()
11    release_date = models.DateField()
12
13# 2. Create the FilterSet
14class ProductFilter(django_filters.FilterSet):
15    price = django_filters.NumberFilter()
16    price__gt = django_filters.NumberFilter(field_name='price', lookup_expr='gt')
17    price__lt = django_filters.NumberFilter(field_name='price', lookup_expr='lt')
18
19    release_year = django_filters.NumberFilter(field_name='release_date', lookup_expr='year')
20    release_year__gt = django_filters.NumberFilter(field_name='release_date', lookup_expr='year__gt')
21    release_year__lt = django_filters.NumberFilter(field_name='release_date', lookup_expr='year__lt')
22
23    class Meta:
24        model = Product
25        fields = ['price', 'release_date']
26
27# 3. Use the filter in a View
28def product_list(request):
29    f = ProductFilter(request.GET, queryset=Product.objects.all())
30    return render(request, 'my_app/template.html', {'filter': f})