add optional select_related to sidebar_view

This commit is contained in:
Laura Klünder 2017-07-05 16:17:19 +02:00
parent cdbc88b48e
commit 90e8a6e995
3 changed files with 13 additions and 6 deletions

View file

@ -69,11 +69,11 @@ class ChangeSet(models.Model):
Returns a base QuerySet to get only changesets the current user is allowed to see Returns a base QuerySet to get only changesets the current user is allowed to see
""" """
if request.user.is_authenticated: if request.user.is_authenticated:
return ChangeSet.objects.select_related('last_update', 'last_change').filter(author=request.user) return ChangeSet.objects.filter(author=request.user)
return ChangeSet.objects.none() return ChangeSet.objects.none()
@classmethod @classmethod
def get_for_request(cls, request): def get_for_request(cls, request, select_related=None):
""" """
Get the changeset for the current request. Get the changeset for the current request.
If a changeset is associated with the session id, it will be returned. If a changeset is associated with the session id, it will be returned.
@ -84,9 +84,11 @@ class ChangeSet(models.Model):
In any case, the default autor for changes added to the queryset during In any case, the default autor for changes added to the queryset during
this request will be set to the current user. this request will be set to the current user.
""" """
if select_related is None:
select_related = ('last_change', )
changeset_pk = request.session.get('changeset') changeset_pk = request.session.get('changeset')
if changeset_pk is not None: if changeset_pk is not None:
qs = ChangeSet.objects.select_related('last_update', 'last_change').exclude(state='applied') qs = ChangeSet.objects.select_related(*select_related).exclude(state='applied')
if request.user.is_authenticated: if request.user.is_authenticated:
qs = qs.filter(author=request.user) qs = qs.filter(author=request.user)
else: else:

View file

@ -7,10 +7,15 @@ from django.views.decorators.cache import never_cache
from c3nav.editor.models import ChangeSet from c3nav.editor.models import ChangeSet
def sidebar_view(func): def sidebar_view(func=None, select_related=None):
if func is None:
def wrapped(inner_func):
return sidebar_view(inner_func, select_related)
return wrapped
@wraps(func) @wraps(func)
def with_ajax_check(request, *args, **kwargs): def with_ajax_check(request, *args, **kwargs):
request.changeset = ChangeSet.get_for_request(request) request.changeset = ChangeSet.get_for_request(request, select_related)
response = func(request, *args, **kwargs) response = func(request, *args, **kwargs)
if request.is_ajax() or 'ajax' in request.GET: if request.is_ajax() or 'ajax' in request.GET:

View file

@ -16,7 +16,7 @@ from c3nav.editor.views.base import sidebar_view
from c3nav.mapdata.models.locations import LocationRedirect, LocationSlug from c3nav.mapdata.models.locations import LocationRedirect, LocationSlug
@sidebar_view @sidebar_view(select_related=('last_update', 'last_state_update', 'author'))
def changeset_detail(request, pk): def changeset_detail(request, pk):
changeset = request.changeset changeset = request.changeset
active = True active = True