Skip to main content

Custom Models, Serializers, Backends and Views to facilitate saving filters in sessions.

Project description

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

drf-session-filtering-2.0.0.tar.gz (7.2 kB view details)

Uploaded Source

Built Distribution

drf_session_filtering-2.0.0-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

Details for the file drf-session-filtering-2.0.0.tar.gz.

File metadata

  • Download URL: drf-session-filtering-2.0.0.tar.gz
  • Upload date:
  • Size: 7.2 kB
  • Tags: Source
  • Uploaded using 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

File hashes

Hashes for drf-session-filtering-2.0.0.tar.gz
Algorithm Hash digest
SHA256 5dd29bff138a3bde5a36808d422883d2a8864a394676be25683c555410f02a1b
MD5 8cda92221d67b1a0e3d34972800c4ba7
BLAKE2b-256 73fa91fbd52aeea31190bc337803b02470a54a5b8076bdb7b16d2630a3a8c895

See more details on using hashes here.

File details

Details for the file drf_session_filtering-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: drf_session_filtering-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 8.7 kB
  • Tags: Python 3
  • Uploaded using 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

File hashes

Hashes for drf_session_filtering-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5b3fcbd208f1c00887ef041bd011428754588b8d1c459b794f39203da6673fb6
MD5 87687ad3154256f894f49004fe4adcf8
BLAKE2b-256 bc162610e1b919e2580999577c274b44dab5c09f304b3ac3fc47b42890978bdd

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page