mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-03 21:24:33 +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'):
|
||||
self.head = self.get
|
||||
|
||||
self.request = request
|
||||
self.args = args
|
||||
self.kwargs = kwargs
|
||||
|
||||
# And continue as usual
|
||||
return self.dispatch(request, *args, **kwargs)
|
||||
|
||||
|
|
|
@ -13,6 +13,15 @@ class BasicViewSet(GenericViewSet):
|
|||
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):
|
||||
def test_initialize_view_set_with_actions(self):
|
||||
request = factory.get('/', '', content_type='application/json')
|
||||
|
@ -42,3 +51,17 @@ class InitializeViewSetsTestCase(TestCase):
|
|||
"For example `.as_view({'get': 'list'})`")
|
||||
else:
|
||||
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