Skip to content

Instawork/django-admin-fast-search

Repository files navigation

django-admin-fast-search

https://travis-ci.org/utkbansal/django-admin-fast-search.svg?branch=master

Your project description goes here

Documentation

The full documentation is at https://django-admin-fast-search.readthedocs.io.

Quickstart

Install django-admin-fast-search:

pip install django-admin-fast-search

Add it to your INSTALLED_APPS:

INSTALLED_APPS = (
    ...
    'django_admin_fast_search',
    ...
)

Use it in your Django admin for search fields:

from django_admin_fast_search.admin import FastSearch

class MyModelAdmin(FastSearch, admin.ModelAdmin):
    list_display = ['name', 'email']

    search_fields_contains = ("address",)
    search_fields_exact = ("id", "email")
    search_fields_fulltext_index = ("name",)
    search_fields = search_fields_fulltext_index + search_fields_exact + search_fields_contains

Use it for list filters with django_filters

from django_filters import BooleanFilter, CharFilter, ModelChoiceFilter, FilterSet
from django_admin_fast_search.admin import FastSearchFilterMixin

class MyModelFilter(FastSearchFilterMixin, FilterSet):
    is_verified = BooleanFilter(label="Verified?")

    company_name = CharFilter(field_name="company__name", lookup_expr="icontains")
    company_pincode = CharFilter(field_name="company__location_pincode", lookup_expr="exact")

    company = ModelChoiceFilter()
    # OR
    company = ModelChoiceFilter(queryset=Company.objects.active())

    exclude_industry = CharFilter(field_name="industry", lookup_expr="icontains", label="Exclude Industry", exclude=True)

    status = MultipleChoiceFilter(
        field_name="status",
        lookup_expr="exact",
        label="Status",
        choices=MyModel.STATUS_CHOICES,
    )

    created_at = DateFilter(field_name="created_at", lookup_expr="gt", label="Signed up After")

    class Meta:
        model = MyModel
        fields = [
            "is_verified",
            "company_name",
            "company_pincode",
            "company",
            "exclude_industry",
            "status",
            "created_at",
        ]


class MyModelAdmin(FastSearch, admin.ModelAdmin):
    list_display = ['name', 'email']

    list_filter = ["company_tier", *MyModelFilter.as_admin_filters()]

    # or only use class-based filters

    list_filter = MyModelFilter.as_admin_filters()

Running Tests

Does the code actually work?

source <YOURVIRTUALENV>/bin/activate
(myenv) $ pip install tox
(myenv) $ tox

Development commands

pip install -r requirements_dev.txt
invoke -l

Credits

Tools used in rendering this package: