Skip to content

Commit

Permalink
split queryset generation to different method
Browse files Browse the repository at this point in the history
  • Loading branch information
pavlov99 committed Nov 19, 2014
1 parent b8dde42 commit 7deabf3
Showing 1 changed file with 34 additions and 13 deletions.
47 changes: 34 additions & 13 deletions jsonapi/resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -402,27 +402,29 @@ def _auth_user_resource_paths(cls):
return result

@classmethod
def get(cls, request=None, **kwargs):
""" Get resource http response.
def get_queryset(cls, request=None, **kwargs):
""" Get objects queryset.
:return str: resource
Method is used to generate objects queryset for resource operations.
It is aimed to:
* Filter objects based on user. Object could be in queryset only if
there is attribute-ForeignKey-ManyToMany path from current resource
to current auth_user.
* Select related objects (or prefetch them) based on requested
requested objects to include
"""
model = cls.Meta.model
queryset = model.objects
NOTE: if you need to get user in this method, use
cls.authenticate(request), because user could be authenticated using
HTTP_BASIC method, not only session.
filters = {
k: v for k, v in kwargs.items()
if k not in cls.RESERVED_GET_PARAMS
# k in cls.fields_own
}
if kwargs.get('ids'):
filters["id__in"] = kwargs.get('ids')
"""
queryset = cls.Meta.model.objects

if cls.Meta.authenticators:
user = cls.authenticate(request)
auth_user_resource_paths = cls._auth_user_resource_paths
if auth_user_resource_paths is None:
# Resource is user
queryset = queryset.filter(id=user.id)
else:
user_filter = models.Q()
Expand All @@ -431,6 +433,25 @@ def get(cls, request=None, **kwargs):

queryset = queryset.filter(user_filter)

return queryset

@classmethod
def get(cls, request=None, **kwargs):
""" Get resource http response.
:return str: resource
"""
queryset = cls.get_queryset(request=request, **kwargs)

filters = {
k: v for k, v in kwargs.items()
if k not in cls.RESERVED_GET_PARAMS
# k in cls.fields_own
}
if kwargs.get('ids'):
filters["id__in"] = kwargs.get('ids')

queryset = queryset.filter(**filters)

# Sort
Expand Down

0 comments on commit 7deabf3

Please sign in to comment.