Subevent list: Add meta-data filter (Z#23114466) (#3083)

Co-authored-by: Raphael Michel <michel@rami.io>
This commit is contained in:
Richard Schreiber
2023-02-06 17:51:47 +01:00
committed by GitHub
parent 6f61155deb
commit 513a90f976
5 changed files with 91 additions and 4 deletions

View File

@@ -110,7 +110,7 @@ class SubEventQueryMixin:
@cached_property
def filter_form(self):
return SubEventFilterForm(data=self.request_data, prefix='filter')
return SubEventFilterForm(data=self.request_data, prefix='filter', event=self.request.event)
class SubEventList(EventPermissionRequiredMixin, PaginationMixin, SubEventQueryMixin, ListView):
@@ -125,6 +125,9 @@ class SubEventList(EventPermissionRequiredMixin, PaginationMixin, SubEventQueryM
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx['filter_form'] = self.filter_form
ctx['meta_fields'] = [
self.filter_form['meta_{}'.format(p.name)] for p in self.request.organizer.meta_properties.filter(filter_allowed=True)
]
quotas = []
for s in ctx['subevents']:

View File

@@ -48,7 +48,8 @@ from django.utils.translation import gettext as _, pgettext
from pretix.base.models import (
EventMetaProperty, EventMetaValue, ItemMetaProperty, ItemMetaValue,
ItemVariation, ItemVariationMetaValue, Order, Organizer, User, Voucher,
ItemVariation, ItemVariationMetaValue, Order, Organizer, SubEventMetaValue,
User, Voucher,
)
from pretix.control.forms.event import EventWizardCopyForm
from pretix.control.permissions import (
@@ -743,6 +744,38 @@ def meta_values(request):
})
def subevent_meta_values(request, organizer, event):
q = request.GET.get('q')
propname = request.GET.get('property')
matches = SubEventMetaValue.objects.filter(
value__icontains=q,
property__name=propname,
subevent__event_id=request.event.pk,
)
event_matches = EventMetaValue.objects.filter(
value__icontains=q,
property__name=propname,
event_id=request.event.pk,
)
defaults = EventMetaProperty.objects.filter(
default__icontains=q,
name=propname,
organizer_id=request.organizer.pk,
)
return JsonResponse({
'results': [
{'name': v, 'id': v}
for v in sorted(
set(defaults.values_list('default', flat=True)[:10]) |
set(matches.values_list('value', flat=True)[:10]) |
set(event_matches.values_list('value', flat=True)[:10])
)
]
})
def item_meta_values(request, organizer, event):
q = request.GET.get('q')
propname = request.GET.get('property')