Hi Shawn, On 03/29/2011 01:28 PM, Shawn Milochik wrote: > Hopefully someone on the core dev team can let me know if this is > possible in Django. If so, it will solve this problem. > I am not familiar with custom metaclass stuff done within models.Model. > > 1. Create a custom metaclass as described in "Pro Python," page 124. > > 2. Add this metaclass to the abstract model. > > This would allow the base-class to be aware of its subclasses and have > a class method that returns a queryset of them. > > Further detail: > This simply amounts to creating a list object in the abstract base > class. Each time a subclass is instantiated, that class is added to > the parent class's list. That's all. That list could be used in a > custom manager to get the desired queryset. > > What I don't know is how nicely this will play with the existing > metaclass work in Django. It seems that a metaclass can be easily made > by subclassing the one used for models.Model instead of the default > 'type,' but this is beyond my experience level. Is this a reasonable > approach?
What you've outlined here is certainly possible (and yes, you'd need to subclass the ModelBase metaclass). I haven't looked at the abstract inheritance stuff recently, but I think there would be some alternative ways for the abstract base to know about its children that wouldn't require the metaclass assignment. However: getting the list of subclasses is (less than) half the battle; the trickier part is giving the ORM the capability to do UNION queries on similar tables, so you can get results from multiple tables in a single QuerySet. Carl -- You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-developers@googlegroups.com. To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.