mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #33733 -- Preserved wrapper assignment for manager methods.
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						parent
						
							0982cf2a01
						
					
				
				
					commit
					46efd03d26
				
			| @@ -1,5 +1,6 @@ | |||||||
| import copy | import copy | ||||||
| import inspect | import inspect | ||||||
|  | from functools import wraps | ||||||
| from importlib import import_module | from importlib import import_module | ||||||
|  |  | ||||||
| from django.db import router | from django.db import router | ||||||
| @@ -81,11 +82,10 @@ class BaseManager: | |||||||
|     @classmethod |     @classmethod | ||||||
|     def _get_queryset_methods(cls, queryset_class): |     def _get_queryset_methods(cls, queryset_class): | ||||||
|         def create_method(name, method): |         def create_method(name, method): | ||||||
|  |             @wraps(method) | ||||||
|             def manager_method(self, *args, **kwargs): |             def manager_method(self, *args, **kwargs): | ||||||
|                 return getattr(self.get_queryset(), name)(*args, **kwargs) |                 return getattr(self.get_queryset(), name)(*args, **kwargs) | ||||||
|  |  | ||||||
|             manager_method.__name__ = method.__name__ |  | ||||||
|             manager_method.__doc__ = method.__doc__ |  | ||||||
|             return manager_method |             return manager_method | ||||||
|  |  | ||||||
|         new_methods = {} |         new_methods = {} | ||||||
|   | |||||||
| @@ -1,3 +1,4 @@ | |||||||
|  | import inspect | ||||||
| import threading | import threading | ||||||
| from datetime import datetime, timedelta | from datetime import datetime, timedelta | ||||||
| from unittest import mock | from unittest import mock | ||||||
| @@ -740,6 +741,13 @@ class ManagerTest(SimpleTestCase): | |||||||
|         self.assertEqual(Article.objects.get.__doc__, models.QuerySet.get.__doc__) |         self.assertEqual(Article.objects.get.__doc__, models.QuerySet.get.__doc__) | ||||||
|         self.assertEqual(Article.objects.count.__name__, models.QuerySet.count.__name__) |         self.assertEqual(Article.objects.count.__name__, models.QuerySet.count.__name__) | ||||||
|  |  | ||||||
|  |     def test_manager_method_signature(self): | ||||||
|  |         self.assertEqual( | ||||||
|  |             str(inspect.signature(Article.objects.bulk_create)), | ||||||
|  |             "(objs, batch_size=None, ignore_conflicts=False, update_conflicts=False, " | ||||||
|  |             "update_fields=None, unique_fields=None)", | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |  | ||||||
| class SelectOnSaveTests(TestCase): | class SelectOnSaveTests(TestCase): | ||||||
|     def test_select_on_save(self): |     def test_select_on_save(self): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user