API: Allow to filter events by attributes (#1466)

* Allow filtern events-ressource on API by attrs

* Document meta-data attr-filter for order resource

* Actually document the change and not some random other nonsensical thing...

* Doc for subevent-filtering

* Test for attr-filtering on events resource

* Allow attr-filtering on subevents

* Add attr-filter test for subevent

* Update doc/api/resources/subevents.rst

* Update src/tests/api/test_subevents.py

* Update doc/api/resources/events.rst
This commit is contained in:
Martin Gross
2019-10-25 17:04:20 +02:00
committed by Raphael Michel
parent 97fbec804b
commit ab0be57106
6 changed files with 48 additions and 3 deletions
+6
View File
@@ -18,6 +18,7 @@ from pretix.base.models import (
)
from pretix.base.models.event import SubEvent
from pretix.helpers.dicts import merge_dicts
from pretix.presale.views.organizer import filter_qs_by_attr
with scopes_disabled():
class EventFilter(FilterSet):
@@ -85,6 +86,8 @@ class EventViewSet(viewsets.ModelViewSet):
organizer=self.request.organizer
)
qs = filter_qs_by_attr(qs, self.request)
return qs.prefetch_related(
'meta_values', 'meta_values__property', 'seat_category_mappings'
)
@@ -241,6 +244,9 @@ class SubEventViewSet(ConditionalListView, viewsets.ModelViewSet):
event__organizer=self.request.organizer,
event__in=self.request.user.get_events_with_any_permission()
)
qs = filter_qs_by_attr(qs, self.request)
return qs.prefetch_related(
'subeventitem_set', 'subeventitemvariation_set', 'seat_category_mappings'
)
+11
View File
@@ -135,6 +135,17 @@ def test_event_list(token_client, organizer, event):
assert [TEST_EVENT_RES] == resp.data['results']
@pytest.mark.django_db
def test_event_list_filter(token_client, organizer, event):
resp = token_client.get('/api/v1/organizers/{}/events/?attr[type]=Conference'.format(organizer.slug))
assert resp.status_code == 200
assert resp.data['count'] == 1
resp = token_client.get('/api/v1/organizers/{}/events/?attr[type]='.format(organizer.slug))
assert resp.status_code == 200
assert resp.data['count'] == 0
@pytest.mark.django_db
def test_event_get(token_client, organizer, event):
resp = token_client.get('/api/v1/organizers/{}/events/{}/'.format(organizer.slug, event.slug))
+11
View File
@@ -130,6 +130,17 @@ def test_subevent_list(token_client, organizer, event, subevent):
assert [] == resp.data['results']
@pytest.mark.django_db
def test_subevent_list_filter(token_client, organizer, event, subevent):
resp = token_client.get('/api/v1/organizers/{}/events/{}/subevents/?attr[type]=Workshop'.format(organizer.slug, event.slug))
assert resp.status_code == 200
assert resp.data['count'] == 1
resp = token_client.get('/api/v1/organizers/{}/events/{}/subevents/?attr[type]=Conference'.format(organizer.slug, event.slug))
assert resp.status_code == 200
assert resp.data['count'] == 0
@pytest.mark.django_db
def test_subevent_get(token_client, organizer, event, subevent):
res = dict(TEST_SUBEVENT_RES)