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 { .itemtable tr.highlight td {
background-color:#FFFFDD; background-color:#FFFFDD;
} }
.itemtable .item-group-header td {
padding-top: 20px;
font-size: 140%;
line-height: 85%;
}
.cancel-btn { .cancel-btn {
margin-right:8px; margin-right:8px;
} }

View file

@ -30,20 +30,32 @@
<table class="table table-condensed itemtable" data-nozoom data-list="{{ model_name }}"> <table class="table table-condensed itemtable" data-nozoom data-list="{{ model_name }}">
<tbody> <tbody>
{% for item in objects %} {% for objects in grouped_objects %}
{% if forloop.counter0|divisibleby:10 %} {% if objects.title %}
<tr> <tr class="item-group-header">
<td><a href="{{ back_url }}" data-no-next-zoom>&laquo; {{ back_title }}</a></td> <td>{{ objects.title }}</td>
{% for col in add_cols %}<td></td>{% endfor %}
<td></td> <td></td>
</tr> </tr>
{% endif %} {% endif %}
<tr data-pk="{{ item.pk }}"> {% for item in objects.objects %}
<td>{{ item.title }}</td> {% if forloop.counter0|divisibleby:10 %}
<td><a href="{{ item.edit_url }}">{{ edit_caption }}</a></td> <tr>
</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 %} {% endfor %}
<tr> <tr>
<td><a href="{{ back_url }}" data-no-next-zoom>&laquo; {{ back_title }}</a></td> <td><a href="{{ back_url }}" data-no-next-zoom>&laquo; {{ back_title }}</a></td>
{% for col in add_cols %}<td></td>{% endfor %}
<td></td> <td></td>
</tr> </tr>
</tbody> </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)) queryset = queryset.filter(model.q_for_request(request))
reverse_kwargs = {} reverse_kwargs = {}
add_cols = []
if level is not None: if level is not None:
reverse_kwargs['level'] = level reverse_kwargs['level'] = level
level = get_object_or_404(Level.objects.filter(Level.q_for_request(request)), pk=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: else:
edit_utils = DefaultEditUtils(request) 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({ ctx.update({
'back_url': reverse('editor.index'), 'back_url': reverse('editor.index'),
'back_title': _('back to overview'), '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: for obj in queryset:
reverse_kwargs['pk'] = obj.pk reverse_kwargs['pk'] = obj.pk
obj.edit_url = reverse(edit_url_name, kwargs=reverse_kwargs) 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) 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({ ctx.update({
'can_create': edit_utils.can_create and can_edit, 'can_create': edit_utils.can_create and can_edit,
'geometry_url': edit_utils.geometry_url, 'geometry_url': edit_utils.geometry_url,
'add_cols': add_cols,
'create_url': reverse(resolver_match.url_name[:-4] + 'create', kwargs=reverse_kwargs), 'create_url': reverse(resolver_match.url_name[:-4] + 'create', kwargs=reverse_kwargs),
'objects': queryset, 'grouped_objects': grouped_objects,
}) })
return APIHybridTemplateContextResponse('editor/list.html', ctx, return APIHybridTemplateContextResponse('editor/list.html', ctx,

View file

@ -418,7 +418,7 @@ class BaseQueryWrapper(BaseWrapper):
@get_queryset @get_queryset
def order_by(self, *args): 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)) return self._wrap_queryset(self._obj.order_by(*args))
@ -910,6 +910,12 @@ class QuerySetWrapper(BaseQueryWrapper):
result += list(self._get_created_objects()) 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: for extra in self._extra:
# implementing the extra() call for prefetch_related # implementing the extra() call for prefetch_related
ex = extra[22:] ex = extra[22:]