mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-10 08:30:51 +03:00
Merge pull request #5229 from IndustriaTech/fix/set-request-args-kwargs
Fixed #5228 Set ViewSet args/kwargs/request before dispatch
This commit is contained in:
commit
1a31959d45
|
@ -82,6 +82,10 @@ class ViewSetMixin(object):
|
||||||
if hasattr(self, 'get') and not hasattr(self, 'head'):
|
if hasattr(self, 'get') and not hasattr(self, 'head'):
|
||||||
self.head = self.get
|
self.head = self.get
|
||||||
|
|
||||||
|
self.request = request
|
||||||
|
self.args = args
|
||||||
|
self.kwargs = kwargs
|
||||||
|
|
||||||
# And continue as usual
|
# And continue as usual
|
||||||
return self.dispatch(request, *args, **kwargs)
|
return self.dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,15 @@ class BasicViewSet(GenericViewSet):
|
||||||
return Response({'ACTION': 'LIST'})
|
return Response({'ACTION': 'LIST'})
|
||||||
|
|
||||||
|
|
||||||
|
class InstanceViewSet(GenericViewSet):
|
||||||
|
|
||||||
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
return self.dummy(request, *args, **kwargs)
|
||||||
|
|
||||||
|
def dummy(self, request, *args, **kwargs):
|
||||||
|
return Response({'view': self})
|
||||||
|
|
||||||
|
|
||||||
class InitializeViewSetsTestCase(TestCase):
|
class InitializeViewSetsTestCase(TestCase):
|
||||||
def test_initialize_view_set_with_actions(self):
|
def test_initialize_view_set_with_actions(self):
|
||||||
request = factory.get('/', '', content_type='application/json')
|
request = factory.get('/', '', content_type='application/json')
|
||||||
|
@ -42,3 +51,17 @@ class InitializeViewSetsTestCase(TestCase):
|
||||||
"For example `.as_view({'get': 'list'})`")
|
"For example `.as_view({'get': 'list'})`")
|
||||||
else:
|
else:
|
||||||
self.fail("actions must not be empty.")
|
self.fail("actions must not be empty.")
|
||||||
|
|
||||||
|
def test_args_kwargs_request_action_map_on_self(self):
|
||||||
|
"""
|
||||||
|
Test a view only has args, kwargs, request, action_map
|
||||||
|
once `as_view` has been called.
|
||||||
|
"""
|
||||||
|
bare_view = InstanceViewSet()
|
||||||
|
view = InstanceViewSet.as_view(actions={
|
||||||
|
'get': 'dummy',
|
||||||
|
})(factory.get('/')).data['view']
|
||||||
|
|
||||||
|
for attribute in ('args', 'kwargs', 'request', 'action_map'):
|
||||||
|
self.assertNotIn(attribute, dir(bare_view))
|
||||||
|
self.assertIn(attribute, dir(view))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user