level_detail editor api
This commit is contained in:
parent
5c87cb9592
commit
46ffca598b
2 changed files with 14 additions and 4 deletions
|
@ -8,6 +8,7 @@ from django.contrib.auth.views import redirect_to_login
|
||||||
from django.contrib.messages import DEFAULT_TAGS as DEFAULT_MESSAGE_TAGS
|
from django.contrib.messages import DEFAULT_TAGS as DEFAULT_MESSAGE_TAGS
|
||||||
from django.contrib.messages import get_messages
|
from django.contrib.messages import get_messages
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
|
from django.db.models import QuerySet
|
||||||
from django.http import HttpResponse, HttpResponseNotModified, HttpResponseRedirect
|
from django.http import HttpResponse, HttpResponseNotModified, HttpResponseRedirect
|
||||||
from django.shortcuts import redirect, render
|
from django.shortcuts import redirect, render
|
||||||
from django.utils.cache import patch_vary_headers
|
from django.utils.cache import patch_vary_headers
|
||||||
|
@ -17,6 +18,7 @@ from rest_framework.response import Response as APIResponse
|
||||||
|
|
||||||
from c3nav.editor.models import ChangeSet
|
from c3nav.editor.models import ChangeSet
|
||||||
from c3nav.mapdata.models.access import AccessPermission
|
from c3nav.mapdata.models.access import AccessPermission
|
||||||
|
from c3nav.mapdata.models.base import SerializableMixin
|
||||||
from c3nav.mapdata.utils.user import can_access_editor
|
from c3nav.mapdata.utils.user import can_access_editor
|
||||||
|
|
||||||
|
|
||||||
|
@ -198,10 +200,18 @@ class APIHybridTemplateContextResponse(APIHybridResponse):
|
||||||
self.ctx = ctx
|
self.ctx = ctx
|
||||||
self.fields = fields
|
self.fields = fields
|
||||||
|
|
||||||
|
def _maybe_serialize_value(self, value):
|
||||||
|
if isinstance(value, SerializableMixin):
|
||||||
|
value = value.serialize(geometry=False)
|
||||||
|
elif isinstance(value, QuerySet) and issubclass(value.model, SerializableMixin):
|
||||||
|
value = [item.serialize(geometry=False) for item in value]
|
||||||
|
return value
|
||||||
|
|
||||||
def get_api_response(self, request):
|
def get_api_response(self, request):
|
||||||
result = self.ctx
|
result = self.ctx
|
||||||
if self.fields:
|
if self.fields:
|
||||||
result = {name: value for name, value in result.items() if name in self.fields}
|
result = {name: self._maybe_serialize_value(value)
|
||||||
|
for name, value in result.items() if name in self.fields}
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def get_html_response(self, request):
|
def get_html_response(self, request):
|
||||||
|
|
|
@ -59,7 +59,7 @@ def main_index(request):
|
||||||
}, fields=('can_create_level', 'child_models'))
|
}, fields=('can_create_level', 'child_models'))
|
||||||
|
|
||||||
|
|
||||||
@sidebar_view
|
@sidebar_view(api_hybrid=True)
|
||||||
@etag(etag_func)
|
@etag(etag_func)
|
||||||
def level_detail(request, pk):
|
def level_detail(request, pk):
|
||||||
Level = request.changeset.wrap_model('Level')
|
Level = request.changeset.wrap_model('Level')
|
||||||
|
@ -71,7 +71,7 @@ def level_detail(request, pk):
|
||||||
else:
|
else:
|
||||||
submodels = ('Space', )
|
submodels = ('Space', )
|
||||||
|
|
||||||
return render(request, 'editor/level.html', {
|
return APIHybridTemplateContextResponse('editor/level.html', {
|
||||||
'levels': Level.objects.filter(Level.q_for_request(request), on_top_of__isnull=True),
|
'levels': Level.objects.filter(Level.q_for_request(request), on_top_of__isnull=True),
|
||||||
'level': level,
|
'level': level,
|
||||||
'level_url': 'editor.levels.detail',
|
'level_url': 'editor.levels.detail',
|
||||||
|
@ -85,7 +85,7 @@ def level_detail(request, pk):
|
||||||
'levels_on_top': level.levels_on_top.filter(Level.q_for_request(request)).all(),
|
'levels_on_top': level.levels_on_top.filter(Level.q_for_request(request)).all(),
|
||||||
'geometry_url': ('/api/editor/geometries/?level='+str(level.primary_level_pk)
|
'geometry_url': ('/api/editor/geometries/?level='+str(level.primary_level_pk)
|
||||||
if request.user_permissions.can_access_base_mapdata else None),
|
if request.user_permissions.can_access_base_mapdata else None),
|
||||||
})
|
}, fields=('level', 'can_edit_graph', 'can_create_level', 'child_models', 'levels_on_top'))
|
||||||
|
|
||||||
|
|
||||||
@sidebar_view
|
@sidebar_view
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue