group and order location groups in editor
This commit is contained in:
parent
9287992c11
commit
aac7fbf23a
4 changed files with 63 additions and 10 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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>« {{ 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>« {{ 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>« {{ back_title }}</a></td>
|
||||
{% for col in add_cols %}<td></td>{% endfor %}
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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:]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue