mirror of
https://github.com/Hopiu/django-model-utils.git
synced 2026-03-16 20:00:23 +00:00
Fix calling create() on a related manager based on PassThroughManager.
This commit is contained in:
parent
cf2c97b620
commit
579abf8e66
3 changed files with 13 additions and 2 deletions
|
|
@ -4,6 +4,9 @@ CHANGES
|
|||
tip (unreleased)
|
||||
----------------
|
||||
|
||||
- Fix calling ``create()`` on a ``RelatedManager`` that subclasses a dynamic
|
||||
``PassThroughManager``. Thanks SeiryuZ for the report. Fixes GH-24.
|
||||
|
||||
- Add workaround for https://code.djangoproject.com/ticket/16855 in
|
||||
InheritanceQuerySet to avoid overriding prior calls to
|
||||
``select_related()``. Thanks ivirabyan.
|
||||
|
|
|
|||
|
|
@ -185,6 +185,9 @@ def create_pass_through_manager_for_queryset_class(base, queryset_cls):
|
|||
return queryset_cls(self.model, **kwargs)
|
||||
|
||||
def __reduce__(self):
|
||||
# our pickling support breaks for subclasses (e.g. RelatedManager)
|
||||
if self.__class__ is not _PassThroughManager:
|
||||
return super(_PassThroughManager, self).__reduce__()
|
||||
return (
|
||||
unpickle_pass_through_manager_for_queryset_class,
|
||||
(base, queryset_cls),
|
||||
|
|
|
|||
|
|
@ -608,14 +608,19 @@ class PassThroughManagerTests(TestCase):
|
|||
class CreatePassThroughManagerTests(TestCase):
|
||||
def setUp(self):
|
||||
self.dude = Dude.objects.create(name='El Duderino')
|
||||
Spot.objects.create(name='The Crib', owner=self.dude, closed=True,
|
||||
secure=True)
|
||||
|
||||
def test_reverse_manager(self):
|
||||
Spot.objects.create(
|
||||
name='The Crib', owner=self.dude, closed=True, secure=True)
|
||||
self.assertEqual(self.dude.spots_owned.closed().count(), 1)
|
||||
|
||||
def test_related_queryset_pickling(self):
|
||||
Spot.objects.create(
|
||||
name='The Crib', owner=self.dude, closed=True, secure=True)
|
||||
qs = self.dude.spots_owned.closed()
|
||||
pickled_qs = pickle.dumps(qs)
|
||||
unpickled_qs = pickle.loads(pickled_qs)
|
||||
self.assertEqual(unpickled_qs.secured().count(), 1)
|
||||
|
||||
def test_related_manager_create(self):
|
||||
self.dude.spots_owned.create(name='The Crib', closed=True, secure=True)
|
||||
|
|
|
|||
Loading…
Reference in a new issue