def _extract_user(self):
"""
Extract user from request.
In detail route extract it from pk and it list
from query params.
"""
pk = self.request.parser_context['kwargs'].get('pk')
# detail case
if pk is not None:
try:
user_id = int(pk.split('_')[0])
# avoid query if user is self
if self.request.user.id == user_id:
return self.request.user
return get_user_model().objects.get(pk=pk.split('_')[0])
except (ValueError, get_user_model().DoesNotExist):
raise exceptions.NotFound()
# list case
try:
user_id = self.request.query_params.get('user')
if user_id is None:
raise exceptions.ParseError(_('User filter needs to be set'))
# avoid query if user is self
if self.request.user.id == int(user_id):
return self.request.user
return get_user_model().objects.get(pk=user_id)
except (ValueError, get_user_model().DoesNotExist):
raise exceptions.ParseError(_('User is invalid'))
评论列表
文章目录