add optional select_related to sidebar_view
This commit is contained in:
parent
cdbc88b48e
commit
90e8a6e995
3 changed files with 13 additions and 6 deletions
|
@ -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:
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue