Allow searching organizes by name

This commit is contained in:
Raphael Michel
2017-11-25 14:27:07 +01:00
parent 3bf8aad127
commit e8867d0fbc
3 changed files with 80 additions and 7 deletions

View File

@@ -278,6 +278,39 @@ class SubEventFilterForm(FilterForm):
return qs return qs
class OrganizerFilterForm(FilterForm):
orders = {
'slug': 'slug',
'name': 'name',
}
query = forms.CharField(
label=_('Organizer name'),
widget=forms.TextInput(attrs={
'placeholder': _('Organizer name'),
'autofocus': 'autofocus'
}),
required=False
)
def __init__(self, *args, **kwargs):
kwargs.pop('request')
super().__init__(*args, **kwargs)
def filter_qs(self, qs):
fdata = self.cleaned_data
if fdata.get('query'):
query = fdata.get('query')
qs = qs.filter(
Q(name__icontains=query) | Q(slug__icontains=query)
)
if fdata.get('ordering'):
qs = qs.order_by(dict(self.fields['ordering'].choices)[fdata.get('ordering')])
return qs
class EventFilterForm(FilterForm): class EventFilterForm(FilterForm):
orders = { orders = {
'slug': 'slug', 'slug': 'slug',

View File

@@ -1,20 +1,46 @@
{% extends "pretixcontrol/base.html" %} {% extends "pretixcontrol/base.html" %}
{% load i18n %} {% load i18n %}
{% load bootstrap3 %}
{% load urlreplace %}
{% load eventurl %} {% load eventurl %}
{% block title %}{% trans "Organizers" %}{% endblock %} {% block title %}{% trans "Organizers" %}{% endblock %}
{% block content %} {% block content %}
<h1>{% trans "Organizers" %}</h1> <h1>{% trans "Organizers" %}</h1>
<p>{% trans "The list below shows all organizer accounts you have administrative access to." %}</p> <p>{% trans "The list below shows all organizer accounts you have administrative access to." %}</p>
<form class="row filter-form" action="" method="get">
<div class="col-md-10 col-sm-6 col-xs-12">
{% bootstrap_field filter_form.query layout='inline' %}
</div>
<div class="col-md-2 col-sm-6 col-xs-12">
<button class="btn btn-primary btn-block" type="submit">
<span class="fa fa-filter"></span>
<span class="hidden-md">
{% trans "Filter" %}
</span>
</button>
</div>
</form>
{% if request.user.is_superuser %} {% if request.user.is_superuser %}
<a href="{% url "control:organizers.add" %}" class="btn btn-default"> <p>
<span class="fa fa-plus"></span> <a href="{% url "control:organizers.add" %}" class="btn btn-default">
{% trans "Create a new organizer" %} <span class="fa fa-plus"></span>
</a> {% trans "Create a new organizer" %}
</a>
</p>
{% endif %} {% endif %}
<table class="table table-condensed table-hover"> <table class="table table-condensed table-hover">
<thead> <thead>
<tr> <tr>
<th>{% trans "Organizer name" %}</th> <th>
{% trans "Organizer name" %}
<a href="?{% url_replace request 'ordering' '-name' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'name' %}"><i class="fa fa-caret-up"></i></a>
</th>
<th>
{% trans "Short form" %}
<a href="?{% url_replace request 'ordering' '-slug' %}"><i class="fa fa-caret-down"></i></a>
<a href="?{% url_replace request 'ordering' 'slug' %}"><i class="fa fa-caret-up"></i></a>
</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@@ -23,6 +49,7 @@
<td><strong> <td><strong>
<a href="{% url "control:organizer" organizer=o.slug %}">{{ o.name }}</a> <a href="{% url "control:organizer" organizer=o.slug %}">{{ o.name }}</a>
</strong></td> </strong></td>
<td>{{ o.slug }}</td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>

View File

@@ -17,6 +17,7 @@ from pretix.base.models import Organizer, Team, TeamInvite, User
from pretix.base.models.event import EventMetaProperty from pretix.base.models.event import EventMetaProperty
from pretix.base.models.organizer import TeamAPIToken from pretix.base.models.organizer import TeamAPIToken
from pretix.base.services.mail import SendMailException, mail from pretix.base.services.mail import SendMailException, mail
from pretix.control.forms.filter import OrganizerFilterForm
from pretix.control.forms.organizer import ( from pretix.control.forms.organizer import (
EventMetaPropertyForm, OrganizerDisplaySettingsForm, OrganizerForm, EventMetaPropertyForm, OrganizerDisplaySettingsForm, OrganizerForm,
OrganizerSettingsForm, OrganizerUpdateForm, TeamForm, OrganizerSettingsForm, OrganizerUpdateForm, TeamForm,
@@ -34,10 +35,22 @@ class OrganizerList(ListView):
paginate_by = 30 paginate_by = 30
def get_queryset(self): def get_queryset(self):
qs = Organizer.objects.all()
if self.filter_form.is_valid():
qs = self.filter_form.filter_qs(qs)
if self.request.user.is_superuser: if self.request.user.is_superuser:
return Organizer.objects.all() return qs
else: else:
return Organizer.objects.filter(pk__in=self.request.user.teams.values_list('organizer', flat=True)) return qs.filter(pk__in=self.request.user.teams.values_list('organizer', flat=True))
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
ctx['filter_form'] = self.filter_form
return ctx
@cached_property
def filter_form(self):
return OrganizerFilterForm(data=self.request.GET, request=self.request)
class InviteForm(forms.Form): class InviteForm(forms.Form):