mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	[1.8.x] Fixed #24831 -- Fixed pickling queryset with prefetch_related() after deleting objects.
Backport of 2913d6b77d from master
			
			
This commit is contained in:
		
				
					committed by
					
						 Tim Graham
						Tim Graham
					
				
			
			
				
	
			
			
			
						parent
						
							1c57d7e7fa
						
					
				
				
					commit
					9d83de8ff3
				
			| @@ -1407,6 +1407,11 @@ class ManyToOneRel(ForeignObjectRel): | |||||||
|             parent_link=parent_link, on_delete=on_delete, related_query_name=related_query_name) |             parent_link=parent_link, on_delete=on_delete, related_query_name=related_query_name) | ||||||
|         self.field_name = field_name |         self.field_name = field_name | ||||||
|  |  | ||||||
|  |     def __getstate__(self): | ||||||
|  |         state = self.__dict__.copy() | ||||||
|  |         state.pop('related_model', None) | ||||||
|  |         return state | ||||||
|  |  | ||||||
|     def get_related_field(self): |     def get_related_field(self): | ||||||
|         """ |         """ | ||||||
|         Returns the Field in the 'to' object to which this relationship is |         Returns the Field in the 'to' object to which this relationship is | ||||||
|   | |||||||
| @@ -37,3 +37,6 @@ Bugfixes | |||||||
|  |  | ||||||
| * Fixed lack of unique constraint when changing a field from | * Fixed lack of unique constraint when changing a field from | ||||||
|   ``primary_key=True`` to ``unique=True`` (:ticket:`24893`). |   ``primary_key=True`` to ``unique=True`` (:ticket:`24893`). | ||||||
|  |  | ||||||
|  | * Fixed queryset pickling when using ``prefetch_related()`` after deleting | ||||||
|  |   objects (:ticket:`24831`). | ||||||
|   | |||||||
| @@ -120,6 +120,20 @@ class PickleabilityTestCase(TestCase): | |||||||
|         groups = pickle.loads(pickle.dumps(groups)) |         groups = pickle.loads(pickle.dumps(groups)) | ||||||
|         self.assertQuerysetEqual(groups, [g], lambda x: x) |         self.assertQuerysetEqual(groups, [g], lambda x: x) | ||||||
|  |  | ||||||
|  |     def test_pickle_prefetch_related_with_m2m_and_objects_deletion(self): | ||||||
|  |         """ | ||||||
|  |         #24831 -- Cached properties on ManyToOneRel created in QuerySet.delete() | ||||||
|  |         caused subsequent QuerySet pickling to fail. | ||||||
|  |         """ | ||||||
|  |         g = Group.objects.create(name='foo') | ||||||
|  |         m2m = M2MModel.objects.create() | ||||||
|  |         m2m.groups.add(g) | ||||||
|  |         Group.objects.all().delete() | ||||||
|  |  | ||||||
|  |         m2ms = M2MModel.objects.prefetch_related('groups') | ||||||
|  |         m2ms = pickle.loads(pickle.dumps(m2ms)) | ||||||
|  |         self.assertQuerysetEqual(m2ms, [m2m], lambda x: x) | ||||||
|  |  | ||||||
|     def test_missing_django_version_unpickling(self): |     def test_missing_django_version_unpickling(self): | ||||||
|         """ |         """ | ||||||
|         #21430 -- Verifies a warning is raised for querysets that are |         #21430 -- Verifies a warning is raised for querysets that are | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user