mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-11-04 09:57:55 +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