Comments (1)
1.
psyferre said: (9 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 9 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: (9 months ago)
I would have been digging around for how to come up with the child instance for ages. Thanks SmileyChris!