group and order location groups in editor

This commit is contained in:
Laura Klünder 2019-12-21 15:35:14 +01:00
parent 9287992c11
commit aac7fbf23a
4 changed files with 63 additions and 10 deletions

View file

@ -205,6 +205,11 @@ a.list-group-item .badge {
.itemtable tr.highlight td {
background-color:#FFFFDD;
}
.itemtable .item-group-header td {
padding-top: 20px;
font-size: 140%;
line-height: 85%;
}
.cancel-btn {
margin-right:8px;
}

View file

@ -30,20 +30,32 @@
<table class="table table-condensed itemtable" data-nozoom data-list="{{ model_name }}">
<tbody>
{% for item in objects %}
{% if forloop.counter0|divisibleby:10 %}
<tr>
<td><a href="{{ back_url }}" data-no-next-zoom>&laquo; {{ back_title }}</a></td>
{% for objects in grouped_objects %}
{% if objects.title %}
<tr class="item-group-header">
<td>{{ objects.title }}</td>
{% for col in add_cols %}<td></td>{% endfor %}
<td></td>
</tr>
{% endif %}
<tr data-pk="{{ item.pk }}">
<td>{{ item.title }}</td>
<td><a href="{{ item.edit_url }}">{{ edit_caption }}</a></td>
</tr>
{% for item in objects.objects %}
{% if forloop.counter0|divisibleby:10 %}
<tr>
<td><a href="{{ back_url }}" data-no-next-zoom>&laquo; {{ back_title }}</a></td>
{% for col in add_cols %}<td></td>{% endfor %}
<td></td>
</tr>
{% endif %}
<tr data-pk="{{ item.pk }}">
<td>{{ item.title }}</td>
{% for col in item.add_cols %}<td>{{ col }}</td>{% endfor %}
<td><a href="{{ item.edit_url }}">{{ edit_caption }}</a></td>
</tr>
{% endfor %}
{% endfor %}
<tr>
<td><a href="{{ back_url }}" data-no-next-zoom>&laquo; {{ back_title }}</a></td>
{% for col in add_cols %}<td></td>{% endfor %}
<td></td>
</tr>
</tbody>

View file

@ -436,6 +436,8 @@ def list_objects(request, model=None, level=None, space=None, explicit_edit=Fals
queryset = queryset.filter(model.q_for_request(request))
reverse_kwargs = {}
add_cols = []
if level is not None:
reverse_kwargs['level'] = level
level = get_object_or_404(Level.objects.filter(Level.q_for_request(request)), pk=level)
@ -477,6 +479,16 @@ def list_objects(request, model=None, level=None, space=None, explicit_edit=Fals
})
else:
edit_utils = DefaultEditUtils(request)
with suppress(FieldDoesNotExist):
model._meta.get_field('category')
queryset = queryset.select_related('category')
with suppress(FieldDoesNotExist):
model._meta.get_field('priority')
add_cols.append('priority')
queryset = queryset.order_by('-priority')
ctx.update({
'back_url': reverse('editor.index'),
'back_title': _('back to overview'),
@ -486,13 +498,31 @@ def list_objects(request, model=None, level=None, space=None, explicit_edit=Fals
for obj in queryset:
reverse_kwargs['pk'] = obj.pk
obj.edit_url = reverse(edit_url_name, kwargs=reverse_kwargs)
obj.add_cols = tuple(getattr(obj, col) for col in add_cols)
reverse_kwargs.pop('pk', None)
if model.__name__ == 'LocationGroup':
LocationGroupCategory = request.changeset.wrap_model('LocationGroupCategory')
grouped_objects = tuple(
{
'title': category.title,
'objects': tuple(obj for obj in queryset if obj.category_id == category.pk)
}
for category in LocationGroupCategory.objects.order_by('-priority')
)
else:
grouped_objects = (
{
'objects': queryset,
},
)
ctx.update({
'can_create': edit_utils.can_create and can_edit,
'geometry_url': edit_utils.geometry_url,
'add_cols': add_cols,
'create_url': reverse(resolver_match.url_name[:-4] + 'create', kwargs=reverse_kwargs),
'objects': queryset,
'grouped_objects': grouped_objects,
})
return APIHybridTemplateContextResponse('editor/list.html', ctx,

View file

@ -418,7 +418,7 @@ class BaseQueryWrapper(BaseWrapper):
@get_queryset
def order_by(self, *args):
"""
Order by is not yet supported on created instances because this is not needed so far.
Order only supported for numeric fields for now
"""
return self._wrap_queryset(self._obj.order_by(*args))
@ -910,6 +910,12 @@ class QuerySetWrapper(BaseQueryWrapper):
result += list(self._get_created_objects())
ordering = self._obj.query.order_by
if ordering:
result = sorted(result, key=lambda obj: tuple(
getattr(obj, field.lstrip('-'))*(-1 if field[0] == '-' else 1) for field in ordering
))
for extra in self._extra:
# implementing the extra() call for prefetch_related
ex = extra[22:]