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 {
|
.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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>« {{ 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>« {{ 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>« {{ back_title }}</a></td>
|
<td><a href="{{ back_url }}" data-no-next-zoom>« {{ back_title }}</a></td>
|
||||||
|
{% for col in add_cols %}<td></td>{% endfor %}
|
||||||
<td></td>
|
<td></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</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))
|
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,
|
||||||
|
|
|
@ -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:]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue