Merge
This commit is contained in:
commit
56827fa6b2
@ -30,7 +30,7 @@
|
||||
<div class="has-text-centered">
|
||||
<a href="?">_</a>
|
||||
{% for letter in letters %}
|
||||
<a href="?start={{ letter }}">{{ letter }}</a>
|
||||
<a href="?start={{ letter }}&sort={{ sort }}">{{ letter }}</a>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
@ -38,8 +38,8 @@
|
||||
<table class="table is-striped is-fullwidth">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Work</th>
|
||||
<th>Composer</th>
|
||||
<th>Work <span class="icon-text"><a href="?start={{ start }}&sort=name">{{ "list_arrow"|icon }}</a></span></th>
|
||||
<th>Composer <span class="icon-text"><a href="?start={{ start }}&sort=composer">{{ "list_arrow"|icon }}</a></span></th>
|
||||
<th class="is-hidden-mobile">Edition</th>
|
||||
{% if not collection and not project %}<th class="is-hidden-touch">Collection</th>{% endif %}
|
||||
{% if project %}<th/>{% endif %}
|
||||
|
||||
@ -205,13 +205,8 @@ class WorkListView(CollectionMixin, TemplateView):
|
||||
data["meta"] = qs.meta
|
||||
# data["page_range"] = data["page_obj"]["paginator"]
|
||||
else:
|
||||
qs = self.get_queryset()
|
||||
|
||||
start = self.request.GET.get("start")
|
||||
if start:
|
||||
start = start.upper()
|
||||
qs = qs.filter(name__gte=start, name__lt=start + "~")
|
||||
data["start"] = start
|
||||
qs, ctx = self.get_filtered_queryset()
|
||||
data.update(ctx)
|
||||
|
||||
data["letters"] = string.ascii_uppercase
|
||||
|
||||
@ -228,9 +223,27 @@ class WorkListView(CollectionMixin, TemplateView):
|
||||
def get_collections(self):
|
||||
raise NotImplementedError
|
||||
|
||||
def get_queryset(self):
|
||||
def get_filtered_queryset(self):
|
||||
works = self.get_works()
|
||||
return works.order_by("name", "composer", "edition", "pk").distinct()
|
||||
ctx = {}
|
||||
|
||||
sort = self.request.GET.get("sort", "name").lower()
|
||||
|
||||
order = ["name", "composer", "edition"]
|
||||
if sort not in order:
|
||||
raise KeyError(f"Cannot sort by {sort}")
|
||||
order.remove(sort)
|
||||
order = [sort] + order + ["pk"]
|
||||
ctx["sort"] = sort
|
||||
|
||||
start = self.request.GET.get("start")
|
||||
if start:
|
||||
start = start.upper()
|
||||
filters = {f"{sort}__gte": start, f"{sort}__lt": start + "~"}
|
||||
works = works.filter(**filters)
|
||||
ctx["start"] = start
|
||||
|
||||
return works.order_by(*order).distinct(), ctx
|
||||
|
||||
def get_results(self, query, page):
|
||||
try:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user