mirror of
https://github.com/Hopiu/django-model-utils.git
synced 2026-03-16 20:00:23 +00:00
Avoid overriding prior calls to select_related in select_subclasses.
This commit is contained in:
parent
93a1a44ee7
commit
cf2c97b620
3 changed files with 19 additions and 0 deletions
|
|
@ -4,6 +4,10 @@ CHANGES
|
|||
tip (unreleased)
|
||||
----------------
|
||||
|
||||
- Add workaround for https://code.djangoproject.com/ticket/16855 in
|
||||
InheritanceQuerySet to avoid overriding prior calls to
|
||||
``select_related()``. Thanks ivirabyan.
|
||||
|
||||
- Added support for arbitrary levels of model inheritance in
|
||||
InheritanceManager. Thanks ivirabyan. (This feature only works in Django
|
||||
1.6+ due to https://code.djangoproject.com/ticket/16572).
|
||||
|
|
|
|||
|
|
@ -20,7 +20,11 @@ class InheritanceQuerySet(QuerySet):
|
|||
if django.VERSION < (1, 6, 0):
|
||||
levels = 1
|
||||
subclasses = self._get_subclasses_recurse(self.model, levels=levels)
|
||||
# workaround https://code.djangoproject.com/ticket/16855
|
||||
field_dict = self.query.select_related
|
||||
new_qs = self.select_related(*subclasses)
|
||||
if isinstance(new_qs.query.select_related, dict) and isinstance(field_dict, dict):
|
||||
new_qs.query.select_related.update(field_dict)
|
||||
new_qs.subclasses = subclasses
|
||||
return new_qs
|
||||
|
||||
|
|
|
|||
|
|
@ -344,6 +344,17 @@ class InheritanceManagerTests(TestCase):
|
|||
self.child1)
|
||||
|
||||
|
||||
def test_prior_select_related(self):
|
||||
# Django 1.2 doesn't have assertNumQueries
|
||||
if django.VERSION >= (1, 3):
|
||||
with self.assertNumQueries(1):
|
||||
obj = self.get_manager().select_related(
|
||||
"inheritancemanagertestchild1").select_subclasses(
|
||||
"inheritancemanagertestchild2").get(pk=self.child1.pk)
|
||||
obj.inheritancemanagertestchild1
|
||||
|
||||
|
||||
|
||||
class InheritanceManagerRelatedTests(InheritanceManagerTests):
|
||||
def setUp(self):
|
||||
self.related = InheritanceManagerTestRelated.objects.create()
|
||||
|
|
|
|||
Loading…
Reference in a new issue