Skip to main content

DRF session filtering

example workflow Coverage Status

About

This package provides a Custom Models, Serializers, Backends and Views to facilitate saving filters in sessions.

Install

pip install drf-session-filtering

Usage

Define a SESSION_MODEL_CONTAINER_KEY setting:

# settings.py

SESSION_MODEL_CONTAINER_KEY = 'session_objects'

Define a models and filter models that will be stored in session.

# models.py 

from django.db import models

from session_filtering.models import BaseSessionModel


class Book(models.Model):
    title = models.CharField(max_length=100)
    issue_year = models.IntegerField()
    publisher = models.TextField()
    price = models.FloatField()
    ...

class BookFilterSessionModel(BaseSessionModel):
   pass

Define a filter set.

# filters.py

from django_filters.rest_framework import FilterSet

from .models import Book


class BookFilter(FilterSet):
    
    class Meta:
        model = Book
        fields = {
            'title': ['exact', 'icontains'],
            'issue_year': ['gt'],
            'price': ['lt'],
            'publisher': ['exact', 'contains'],
        }

Define a serializers for models and filter models.

# serializers.py

from rest_framework import serializers
from session_filtering.serializers import (
    FilterBaseSerializer,
    SessionSaveFilterMixin,
)

from .filters import BookFilter
from .models import Book


class BookSerializer(serializers.ModelSerializer):

    class Meta:
        model = Book
        fields = '__all__'


class BookFilterSerializer(SessionSaveFilterMixin, FilterBaseSerializer):

    class Meta:
        filter_class = BookFilter

Define a filter view and a model viewset using filter serializer and filter model defined before.

# views.py

from rest_framework.generics import GenericAPIView
from rest_framework.mixins import *
from rest_framework.viewsets import *

from session_filtering.views import BaseFilterMixin
from session_filtering.backends import SessionFilterBackend

from .filters import BookFilter
from .models import Book, BookFilterSessionModel
from .serializers import BookSerializer, BookFilterSerializer

    
class BookFilterViewSet(
    BaseFilterMixin,
    CreateModelMixin,
    RetrieveModelMixin,
    UpdateModelMixin,
    ListModelMixin,
    GenericViewSet,
):
    filter_class = BookFilter
    serializer_class = BookFilterSerializer
    filter_session_model = BookFilterSessionModel

    
class BooksViewSet(
    CreateModelMixin,
    RetrieveModelMixin,
    UpdateModelMixin,
    DestroyModelMixin,
    ListModelMixin,
    ViewSetMixin,
    GenericAPIView,
):
    serializer_class = BookSerializer
    filter_backends = [SessionFilterBackend]
    filter_class = BookFilter
    filter_session_model = BookFilterSessionModel
    filter_serializer_class = BookFilterSerializer
    filter_lookup_field = 'filterset_id'
    queryset = Book.objects.all()

License

The Django Wicked Historian package is licensed under the FreeBSD License.

Release files for drf-session-filtering 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for drf-session-filtering 2.0.0
File Size Uploaded
drf-session-filtering-2.0.0.tar.gz 7.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for drf-session-filtering 2.0.0
File Interpreter ABI Platform
drf_session_filtering-2.0.0-py3-none-any.whl Python 3 none any Details

Total release size:15.9 kB

Release files / drf-session-filtering-2.0.0.tar.gz

Download URL drf-session-filtering-2.0.0.tar.gz
Size 7.2 kB
Tags Source
SHA-256 checksum
How to use checksums
5dd29bff138a3bde5a36808d422883d2a8864a394676be25683c555410f02a1b
BLAKE2b-256 checksum
How to use checksums
73fa91fbd52aeea31190bc337803b02470a54a5b8076bdb7b16d2630a3a8c895
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

Release files / drf_session_filtering-2.0.0-py3-none-any.whl

Download URL drf_session_filtering-2.0.0-py3-none-any.whl
Size 8.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5b3fcbd208f1c00887ef041bd011428754588b8d1c459b794f39203da6673fb6
BLAKE2b-256 checksum
How to use checksums
bc162610e1b919e2580999577c274b44dab5c09f304b3ac3fc47b42890978bdd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

Release history Release notifications | RSS feed

This release

2.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page