{"library":"django-filter","title":"django-filter","description":"Django-filter is a reusable Django application for allowing users to filter querysets dynamically. It uses a CalVer versioning scheme (Year.ReleaseNumber) and aims to support all current Django versions, matching Python versions, and the latest Django REST Framework.","language":"python","status":"active","last_verified":"Wed May 20","install":{"commands":["pip install django-filter"],"cli":null},"imports":["import django_filters\n\nclass MyFilter(django_filters.FilterSet):","import django_filters\n\nmy_field = django_filters.CharFilter(...)","from django_filters.rest_framework import DjangoFilterBackend"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import django_filters\nfrom django.db import models\nfrom django.views.generic import ListView\nfrom rest_framework import generics\nfrom rest_framework import serializers\nfrom django_filters.rest_framework import DjangoFilterBackend\n\n# 1. Define a Django Model\nclass Product(models.Model):\n    name = models.CharField(max_length=255)\n    price = models.DecimalField(max_digits=5, decimal_places=2)\n    release_date = models.DateField(null=True, blank=True)\n    in_stock = models.BooleanField(default=True)\n\n    def __str__(self):\n        return self.name\n\n    class Meta:\n        app_label = 'myapp' # Required for models in standalone snippets\n\n# 2. Define a FilterSet for the Model\nclass ProductFilter(django_filters.FilterSet):\n    name = django_filters.CharFilter(lookup_expr='icontains')\n    price_gt = django_filters.NumberFilter(field_name='price', lookup_expr='gt')\n    price_lt = django_filters.NumberFilter(field_name='price', lookup_expr='lt')\n\n    class Meta:\n        model = Product\n        fields = ['name', 'price', 'release_date', 'in_stock']\n\n# 3. Use with a Django Class-Based View\n# (Requires Django URL configuration and template setup)\nclass ProductListView(ListView):\n    model = Product\n    template_name = 'product_list.html' # Dummy template for example\n    context_object_name = 'products'\n\n    def get_queryset(self):\n        queryset = super().get_queryset()\n        filter = ProductFilter(self.request.GET, queryset=queryset)\n        return filter.qs\n\n    def get_context_data(self, **kwargs):\n        context = super().get_context_data(**kwargs)\n        context['filter'] = ProductFilter(self.request.GET, queryset=self.get_queryset())\n        return context\n\n# 4. Use with Django REST Framework\nclass ProductSerializer(serializers.ModelSerializer):\n    class Meta:\n        model = Product\n        fields = '__all__'\n\nclass ProductAPIView(generics.ListAPIView):\n    queryset = Product.objects.all()\n    serializer_class = ProductSerializer\n    filter_backends = [DjangoFilterBackend]\n    filterset_class = ProductFilter # Or filterset_fields = ['name', 'price'] for simpler cases\n\n# To run this code, you would need:\n# - A Django project and app ('myapp').\n# - Add 'django_filters' and 'rest_framework' to INSTALLED_APPS in settings.py.\n# - Define URL patterns for ProductListView and ProductAPIView.\n# - Run migrations to create the Product model.\n# - Optionally, create 'product_list.html' template for the ListView.","lang":"python","description":"This quickstart demonstrates defining a `FilterSet` for a Django model and integrating it with a standard Django class-based view (`ListView`) and a Django REST Framework `generics.ListAPIView`. For DRF, `DjangoFilterBackend` is added to `filter_backends` and the `filterset_class` or `filterset_fields` is specified on the view. Remember to add `django_filters` and `rest_framework` to `INSTALLED_APPS` in your Django `settings.py`.","tag":null,"tag_description":null,"last_tested":"2026-04-24","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]},"compatibility":{"tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","last_tested":"2026-05-20","installed_version":"25.1","pypi_latest":"25.2","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":3.4,"avg_import_s":0.69,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"django-filter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.52,"mem_mb":15.4,"disk_size":"66.9M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"django-filter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.52,"mem_mb":15.4,"disk_size":"66.9M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"django-filter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.4,"import_time_s":0.43,"mem_mb":15.4,"disk_size":"67M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"django-filter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.41,"mem_mb":15.4,"disk_size":"67M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"django-filter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.69,"mem_mb":17.6,"disk_size":"71.3M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"django-filter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.7,"mem_mb":17.6,"disk_size":"71.3M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"django-filter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.3,"import_time_s":0.57,"mem_mb":17.6,"disk_size":"72M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"django-filter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.74,"mem_mb":17.6,"disk_size":"72M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"django-filter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.87,"mem_mb":16.5,"disk_size":"62.8M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"django-filter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.95,"mem_mb":16.5,"disk_size":"62.8M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"django-filter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.3,"import_time_s":0.82,"mem_mb":16.5,"disk_size":"63M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"django-filter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":1,"mem_mb":16.5,"disk_size":"63M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"django-filter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.95,"mem_mb":17.5,"disk_size":"62.7M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"django-filter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.98,"mem_mb":17.5,"disk_size":"62.6M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"django-filter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.3,"import_time_s":0.83,"mem_mb":17.5,"disk_size":"63M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"django-filter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.96,"mem_mb":17.5,"disk_size":"63M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"django-filter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":null,"import_time_s":0.46,"mem_mb":14.3,"disk_size":"64.9M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"django-filter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.45,"mem_mb":14.3,"disk_size":"64.9M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"django-filter","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":3.8,"import_time_s":0.41,"mem_mb":14.3,"disk_size":"65M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"django-filter","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":0.45,"mem_mb":14.3,"disk_size":"65M"}]}}