diff --git a/evennia/web/api/filters.py b/evennia/web/api/filters.py index 6888b5fbb1..0c93aa3650 100644 --- a/evennia/web/api/filters.py +++ b/evennia/web/api/filters.py @@ -8,7 +8,7 @@ https://django-filter.readthedocs.io/en/latest/guide/rest_framework.html """ from django.db.models import Q from django_filters.rest_framework.filterset import FilterSet -from django_filters.filters import CharFilter +from django_filters.filters import CharFilter, EMPTY_VALUES from evennia.objects.models import ObjectDB from evennia.accounts.models import AccountDB @@ -22,6 +22,10 @@ class TagTypeFilter(CharFilter): tag_type = None def filter(self, qs, value): + # if no value is specified, we don't use the filter + if value in EMPTY_VALUES: + return qs + # if they enter a value, we filter objects by having a tag of this type with the given name return qs.filter(Q(db_tags__db_tagtype=self.tag_type) & Q(db_tags__db_key=value)) diff --git a/evennia/web/api/tests.py b/evennia/web/api/tests.py index 2afd5310b8..50b35a8bbe 100644 --- a/evennia/web/api/tests.py +++ b/evennia/web/api/tests.py @@ -19,6 +19,7 @@ urlpatterns = [ ) class TestEvenniaRESTApi(EvenniaTest): client_class = APIClient + maxDiff = None def setUp(self): super().setUp() @@ -96,6 +97,7 @@ class TestEvenniaRESTApi(EvenniaTest): with self.subTest(msg=f"Testing {view.view_name} "): view_url = reverse(f"api:{view.view_name}") response = self.client.get(view_url) + self.assertEqual(response.status_code, 200) self.assertCountEqual(response.data['results'], [view.serializer(obj).data for obj in view.list]) def test_create(self):