[1.8.x] Fixed #24831 -- Fixed pickling queryset with prefetch_related() after deleting objects.
Backport of 2913d6b77d
from master
This commit is contained in:
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
|
||||||
|
|
Loading…
Reference in New Issue