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
|
||||
"""
|
||||
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()
|
||||
|
||||
@classmethod
|
||||
def get_for_request(cls, request):
|
||||
def get_for_request(cls, request, select_related=None):
|
||||
"""
|
||||
Get the changeset for the current request.
|
||||
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
|
||||
this request will be set to the current user.
|
||||
"""
|
||||
if select_related is None:
|
||||
select_related = ('last_change', )
|
||||
changeset_pk = request.session.get('changeset')
|
||||
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:
|
||||
qs = qs.filter(author=request.user)
|
||||
else:
|
||||
|
|
|
@ -7,10 +7,15 @@ from django.views.decorators.cache import never_cache
|
|||
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)
|
||||
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)
|
||||
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
|
||||
|
||||
|
||||
@sidebar_view
|
||||
@sidebar_view(select_related=('last_update', 'last_state_update', 'author'))
|
||||
def changeset_detail(request, pk):
|
||||
changeset = request.changeset
|
||||
active = True
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue