Skip to content

FacetedFilterSearchFilterBackend not working when filtering using "__in" operator #308

Open
@gmuj

Description

@gmuj

Describe the bug

When using filter with in operator and facet param eg:
?facet=state&state__in=published__not_published

I get the following error:

    def aggregate(self, request, queryset, view):
>       facets = queryset._facets
E       AttributeError: 'Search' object has no attribute '_facets'

Environment

Python environment:

  1. pip list
Package                            Version  Editable project location
---------------------------------- -------- ------------------------------------------------------
asgiref                            3.4.1
attrs                              21.2.0
backports.entry-points-selectable  1.1.0
certifi                            2023.5.7
coverage                           5.5
distlib                            0.3.2
Django                             3.2.5
django-cors-headers                3.7.0
django-debug-toolbar               3.2.1
django-debug-toolbar-force         0.1.8
django-elasticsearch-debug-toolbar 2.0.0
django-elasticsearch-dsl           7.3
django-elasticsearch-dsl-drf       0.22.5   /home/gmuj/Playground/django-elasticsearch-dsl-drf/src
django-nine                        0.2.4
django-ormex                       0.2.1
djangorestframework                3.12.4
elasticsearch                      7.17.9
elasticsearch-dsl                  7.4.1
factory-boy                        2.11.1
Faker                              8.1.4
filelock                           3.0.12
iniconfig                          1.1.1
mock                               4.0.3
packaging                          21.0
pip                                22.3.1
platformdirs                       2.0.2
pluggy                             0.13.1
py                                 1.10.0
pyparsing                          2.4.7
pytest                             6.2.4
pytest-cov                         2.12.0
pytest-django                      4.3.0
pytest-ordering                    0.6
pytest-pythonpath                  0.7.3
python-dateutil                    2.8.2
pytz                               2021.1
selenium                           3.141.0
setuptools                         58.1.0
six                                1.16.0
sqlparse                           0.4.1
text-unidecode                     1.3
toml                               0.10.2
tox                                3.23.1
urllib3                            1.26.6
virtualenv                         20.6.0
  1. python --version
    Python 3.9.9

Which version of Elasticsearch are you using?

To Reproduce
Steps to reproduce the behavior:

Add the following test to django_elasticsearch_dsl_drf/tests/test_faceted_filtered_search.py

    def test_list_results_facet_and_filter_using_in_operator(self):
        self.authenticate()
        url = reverse('bookdocument_faceted_filtered-list')

        response = self.client.get(url + '?facet=state&state__in={}__{}'.format(
            constants.BOOK_PUBLISHING_STATUS_PUBLISHED,
            constants.BOOK_PUBLISHING_STATUS_NOT_PUBLISHED
        ))
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        # Should contain all published books
        self.assertEqual(len(response.data['results']), self.published_count)

        # Should contain 1 facet
        self.assertEqual(len(response.data['facets']), 1)
        self.assertEqual(response.data['facets']['_filter_state']['state']['buckets'], [{
            "doc_count": self.published_count,
            "key": "published"
        }, {
            "doc_count": self.not_published_count,
            "key": "not_published"
        }])

Expected behavior
No error should happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Additional context
Add any other context about the problem here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions