Comments (1)
psyferre said: (31 months ago)
I would have been digging around for how to come up with the child instance for ages. Thanks SmileyChris!
Rambling on about Django 31 months ago.
On IRC today, someone was asking about a problem which boiled down to finding the matching inherited instance when you have an instance of base class.
Since I enjoy looking around in the database internals, here's a little solution I whipped up. Just attach this to your base Model class:
@property
def child(self):
from django.core.exceptions import ObjectDoesNotExist
for related_object in self._meta.get_all_related_objects():
if not issubclass(related_object.model, self.__class__):
continue
try:
return getattr(self, related_object.get_accessor_name())
except ObjectDoesNotExist:
pass
Then base_instance.child will either return a child instance or None.
If you're interested in the _meta internals too, I recommend reading the source here: django/db/models/options.py
Leave a comment or see my other ramblings.
psyferre said: (31 months ago)
I would have been digging around for how to come up with the child instance for ages. Thanks SmileyChris!