mirror of
https://github.com/pretix/pretix.git
synced 2026-08-21 12:36:26 +00:00
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:
committed by
Raphael Michel
parent
97fbec804b
commit
ab0be57106
@@ -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'
|
||||
)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user