Metadata-Version: 2.3
Name: drf-haystack-search-filter
Version: 1.2.0
Summary: A django-haystack search filter for Django Rest Framework.
Project-URL: Homepage, https://github.com/stefanofusai/drf-haystack-search-filter
Project-URL: Repository, https://github.com/stefanofusai/drf-haystack-search-filter
Author-email: Stefano Fusai <stefanofusai@gmail.com>
Maintainer-email: Stefano Fusai <stefanofusai@gmail.com>
Requires-Python: >=3.12
Requires-Dist: django-haystack==3.3.0
Requires-Dist: django==5.1.4
Requires-Dist: djangorestframework==3.15.2
Description-Content-Type: text/markdown

# drf-haystack-search-filter

A [django-haystack](https://github.com/django-haystack/django-haystack) search filter for Django Rest Framework.

This package uses [uv](https://docs.astral.sh/uv/) for project management. To get started, ensure that **uv** is installed on your machine and updated to the `0.5.6` version. Detailed installation instructions for **uv** can be found [here](https://docs.astral.sh/uv/getting-started/installation/).

## Installation

```bash
uv add drf-haystack-search-filter
```

## Usage

Simply import the `HaystackSearchFilter` and use it in your API views:

```python
from drf_haystack_search_filter.filters import HaystackSearchFilter

...

class MyAPIView(...):
    ...
    filter_backends = [HaystackSearchFilter, ...]
    ...
```

You can customize the search behavior by overriding the `_search` method.

```python
from typing import TypeVar

from drf_haystack_search_filter import HaystackSearchFilter

T = TypeVar("T")


class MyHaystackSearchFilter(HaystackSearchFilter):
    def _search(self, request: Request, queryset: QuerySet[T], view: APIView, query: str) -> QuerySet[T]:
        # Customize the search behavior here
        return queryset.filter(
            pk__in=(
                SearchQuerySet()
                .models(queryset.model)
                .filter(content__startswith=query)
                .values_list("pk", flat=True)
            )
        )

class MyAPIView(...):
    ...
    filter_backends = [MyHaystackSearchFilter, ...]
    ...
```

## Development

```bash
uv sync --group=development
uv run pre-commit install --install-hooks
uv run pre-commit install --hook-type=commit-msg
```

## Contributing

Contributions are welcome! To get started, please refer to our [contribution guidelines](https://github.com/stefanofusai/drf-haystack-search-filter/blob/main/CONTRIBUTING.md).

## Issues

If you encounter any problems while using this package, please open a new issue [here](https://github.com/stefanofusai/drf-haystack-search-filter/issues).
