1. Matt Austin
  2. django-model-utils

Commits

Carl Meyer  committed 7f88455 Merge

Merge pull request #5 from smacker/master

get_subclass method - thanks smacker!

  • Participants
  • Parent commits 9f282cc, 9a6b914
  • Branches default

Comments (0)

Files changed (4)

File .gitignore

View file
  • Ignore whitespace
 .coverage
 .tox/
 Django-*.egg
+*.pyc

File README.rst

View file
  • Ignore whitespace
     nearby_places = Place.objects.select_subclasses("restaurant")
     # restaurants will be Restaurant instances, bars will still be Place instances
 
+Also it provides syntax sugar for `get()` method::
+    
+    place = Place.objects.get_subclass(id=some_id)
+    # "place" will automatically be an instance of Place, Restaurant, or Bar
+
 If you don't explicitly call ``select_subclasses()``, an ``InheritanceManager``
 behaves identically to a normal ``Manager``; so it's safe to use as your
 default manager for the model.

File model_utils/managers.py

View file
  • Ignore whitespace
     def select_subclasses(self, *subclasses):
         return self.get_query_set().select_subclasses(*subclasses)
 
+    def get_subclass(self, *args, **kwargs):
+        return self.get_query_set().select_subclasses().get(*args, **kwargs)
+
 
 class InheritanceCastMixin(object):
     def cast(self):

File model_utils/tests/tests.py

View file
  • Ignore whitespace
                 set([self.child1,
                      InheritanceManagerTestParent(pk=self.child2.pk)]))
 
+        def test_get_subclass(self):
+            self.assertEquals(
+                self.get_manager().get_subclass(pk=self.child1.pk),
+                self.child1)
+
 
     class InheritanceManagerRelatedTests(InheritanceManagerTests):
         def setUp(self):