django-opensearch-dsl-filtering


Namedjango-opensearch-dsl-filtering JSON
Version 0.1.6 PyPI version JSON
download
home_pageNone
SummaryA filtering system for Opensearch documents similar to django-filter
upload_time2025-10-22 11:44:29
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseMIT
keywords opensearch django filter search
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Django Opensearch DSL Filtering

A filtering system for Opensearch documents similar to django-filter, but designed to work with Opensearch queries instead of Django ORM.

## Installation

```bash
pip install django-opensearch-dsl-filtering
```

## Features

- Filter Opensearch documents using a familiar Django-like API
- Generate Django forms for your filters automatically
- Support for pagination and sorting
- Various filter types: CharFilter, NumericFilter, RangeFilter, DateFilter, BooleanFilter

## Quick Start

### Define a Document FilterSet

```python
from django_opensearch_dsl import Document
from django_opensearch_dsl_filtering import CharFilter, DateFilter, DocumentFilterSet, NumericFilter

# Assuming you have a Document class defined
class BookDocument(Document):
    # Your document definition here
    class Index:
        name = "books"

    class Django:
        model = Book
        fields = ["id"]

# Create a FilterSet for your document
class BookDocumentFilterSet(DocumentFilterSet):
    document = BookDocument

    # Define filters
    title = CharFilter(field_name="title", lookup_expr="match", label="Title")
    author = CharFilter(field_name="author", lookup_expr="match", label="Author")
    publication_date = DateFilter(field_name="publication_date", label="Publication Date")
    price = NumericFilter(field_name="price", label="Price")
    price_min = NumericFilter(field_name="price", lookup_expr="gte", label="Min Price")
    price_max = NumericFilter(field_name="price", lookup_expr="lte", label="Max Price")

    # Define sorting options
    SORT_CHOICES = [
        ("", "Default"),
        ("title", "Title (A-Z)"),
        ("-title", "Title (Z-A)"),
        ("price", "Price (Low to High)"),
        ("-price", "Price (High to Low)"),
    ]
```

### Use the FilterSet in a View

```python
from django.shortcuts import render

def book_search(request):
    # Create a filter set with the request data
    filter_set = BookDocumentFilterSet(data=request.GET)

    # Get the search results
    search = filter_set.search()
    results = search.execute()

    # Get the form for rendering in the template
    form = filter_set.get_form()

    return render(
        request,
        "books/search.html",
        {
            "form": form,
            "results": results,
        },
    )
```

### Use the Form in a Template

```html
<form method="get">
    {{ form.as_p }}
    <button type="submit">Search</button>
</form>

<div class="results">
    {% for result in results %}
        <div class="result">
            <h2>{{ result.title }}</h2>
            <p>Author: {{ result.author }}</p>
            <p>Price: ${{ result.price }}</p>
        </div>
    {% endfor %}
</div>
```

## Available Filters

- `CharFilter`: For text fields
- `NumericFilter`: For numeric fields
- `RangeFilter`: For numeric fields with a range
- `DateFilter`: For date fields
- `BooleanFilter`: For boolean fields

## Customizing Filters

Each filter can be customized with the following parameters:

- `field_name`: The name of the field to filter on
- `lookup_expr`: The lookup expression to use (e.g., "match", "term", "wildcard", "gt", "lt", etc.)
- `label`: The label to use for the form field

## License

MIT

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "django-opensearch-dsl-filtering",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "opensearch, django, filter, search",
    "author": null,
    "author_email": "Ben Atkinson <ben@streamlinedanalytics.co.uk>",
    "download_url": "https://files.pythonhosted.org/packages/b7/ad/5bb3076de15a284cf2ba72285ce49a7a82f8b5985f5ea190773d28b751e8/django_opensearch_dsl_filtering-0.1.6.tar.gz",
    "platform": null,
    "description": "# Django Opensearch DSL Filtering\r\n\r\nA filtering system for Opensearch documents similar to django-filter, but designed to work with Opensearch queries instead of Django ORM.\r\n\r\n## Installation\r\n\r\n```bash\r\npip install django-opensearch-dsl-filtering\r\n```\r\n\r\n## Features\r\n\r\n- Filter Opensearch documents using a familiar Django-like API\r\n- Generate Django forms for your filters automatically\r\n- Support for pagination and sorting\r\n- Various filter types: CharFilter, NumericFilter, RangeFilter, DateFilter, BooleanFilter\r\n\r\n## Quick Start\r\n\r\n### Define a Document FilterSet\r\n\r\n```python\r\nfrom django_opensearch_dsl import Document\r\nfrom django_opensearch_dsl_filtering import CharFilter, DateFilter, DocumentFilterSet, NumericFilter\r\n\r\n# Assuming you have a Document class defined\r\nclass BookDocument(Document):\r\n    # Your document definition here\r\n    class Index:\r\n        name = \"books\"\r\n\r\n    class Django:\r\n        model = Book\r\n        fields = [\"id\"]\r\n\r\n# Create a FilterSet for your document\r\nclass BookDocumentFilterSet(DocumentFilterSet):\r\n    document = BookDocument\r\n\r\n    # Define filters\r\n    title = CharFilter(field_name=\"title\", lookup_expr=\"match\", label=\"Title\")\r\n    author = CharFilter(field_name=\"author\", lookup_expr=\"match\", label=\"Author\")\r\n    publication_date = DateFilter(field_name=\"publication_date\", label=\"Publication Date\")\r\n    price = NumericFilter(field_name=\"price\", label=\"Price\")\r\n    price_min = NumericFilter(field_name=\"price\", lookup_expr=\"gte\", label=\"Min Price\")\r\n    price_max = NumericFilter(field_name=\"price\", lookup_expr=\"lte\", label=\"Max Price\")\r\n\r\n    # Define sorting options\r\n    SORT_CHOICES = [\r\n        (\"\", \"Default\"),\r\n        (\"title\", \"Title (A-Z)\"),\r\n        (\"-title\", \"Title (Z-A)\"),\r\n        (\"price\", \"Price (Low to High)\"),\r\n        (\"-price\", \"Price (High to Low)\"),\r\n    ]\r\n```\r\n\r\n### Use the FilterSet in a View\r\n\r\n```python\r\nfrom django.shortcuts import render\r\n\r\ndef book_search(request):\r\n    # Create a filter set with the request data\r\n    filter_set = BookDocumentFilterSet(data=request.GET)\r\n\r\n    # Get the search results\r\n    search = filter_set.search()\r\n    results = search.execute()\r\n\r\n    # Get the form for rendering in the template\r\n    form = filter_set.get_form()\r\n\r\n    return render(\r\n        request,\r\n        \"books/search.html\",\r\n        {\r\n            \"form\": form,\r\n            \"results\": results,\r\n        },\r\n    )\r\n```\r\n\r\n### Use the Form in a Template\r\n\r\n```html\r\n<form method=\"get\">\r\n    {{ form.as_p }}\r\n    <button type=\"submit\">Search</button>\r\n</form>\r\n\r\n<div class=\"results\">\r\n    {% for result in results %}\r\n        <div class=\"result\">\r\n            <h2>{{ result.title }}</h2>\r\n            <p>Author: {{ result.author }}</p>\r\n            <p>Price: ${{ result.price }}</p>\r\n        </div>\r\n    {% endfor %}\r\n</div>\r\n```\r\n\r\n## Available Filters\r\n\r\n- `CharFilter`: For text fields\r\n- `NumericFilter`: For numeric fields\r\n- `RangeFilter`: For numeric fields with a range\r\n- `DateFilter`: For date fields\r\n- `BooleanFilter`: For boolean fields\r\n\r\n## Customizing Filters\r\n\r\nEach filter can be customized with the following parameters:\r\n\r\n- `field_name`: The name of the field to filter on\r\n- `lookup_expr`: The lookup expression to use (e.g., \"match\", \"term\", \"wildcard\", \"gt\", \"lt\", etc.)\r\n- `label`: The label to use for the form field\r\n\r\n## License\r\n\r\nMIT\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A filtering system for Opensearch documents similar to django-filter",
    "version": "0.1.6",
    "project_urls": {
        "Bug Tracker": "https://github.com/yourusername/django-opensearch-dsl-filtering/issues",
        "Homepage": "https://github.com/yourusername/django-opensearch-dsl-filtering"
    },
    "split_keywords": [
        "opensearch",
        " django",
        " filter",
        " search"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c3537814b70571b515de5e14566b22dfd30178387934d9b2b40887a6d8206641",
                "md5": "52d54b26f07338a4c98d627674a8bb9e",
                "sha256": "20a293a2da5a16c70cdd36f23b58107fec3e55699855b2470e3bac44c0741a33"
            },
            "downloads": -1,
            "filename": "django_opensearch_dsl_filtering-0.1.6-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "52d54b26f07338a4c98d627674a8bb9e",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 7212,
            "upload_time": "2025-10-22T11:44:28",
            "upload_time_iso_8601": "2025-10-22T11:44:28.113905Z",
            "url": "https://files.pythonhosted.org/packages/c3/53/7814b70571b515de5e14566b22dfd30178387934d9b2b40887a6d8206641/django_opensearch_dsl_filtering-0.1.6-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b7ad5bb3076de15a284cf2ba72285ce49a7a82f8b5985f5ea190773d28b751e8",
                "md5": "005e5cc2a11e0dd4e3a74d69d183f9c1",
                "sha256": "1c909c055c07040048e09ac2f545fd1f845068f4fe2898183a114309cc216cea"
            },
            "downloads": -1,
            "filename": "django_opensearch_dsl_filtering-0.1.6.tar.gz",
            "has_sig": false,
            "md5_digest": "005e5cc2a11e0dd4e3a74d69d183f9c1",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 7839,
            "upload_time": "2025-10-22T11:44:29",
            "upload_time_iso_8601": "2025-10-22T11:44:29.494966Z",
            "url": "https://files.pythonhosted.org/packages/b7/ad/5bb3076de15a284cf2ba72285ce49a7a82f8b5985f5ea190773d28b751e8/django_opensearch_dsl_filtering-0.1.6.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-22 11:44:29",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "yourusername",
    "github_project": "django-opensearch-dsl-filtering",
    "github_not_found": true,
    "lcname": "django-opensearch-dsl-filtering"
}
        
Elapsed time: 3.10369s