Given the following models:
class Module(models.Model):
pass
class Content(models.Model):
module = models.ForeignKey(Module, related_name='contents')
class Blog(Module):
pass
class Post(Content):
pass
I would like to be able to get all the “post” objects owned by blog doing something like:
b = Blog.objects.get(pk=1)
b.posts.all()
However, I haven’t figured out a good way of doing this. I can’t use b.contents.all() as I need Post instances and not Content instances. I won’t ever have a root content object, every content object is going to be subclassed, but I can’t use abstract classes as I want a central table with all my content in it and then there will be content_blog etc tables for all the unique inherited pieces of content.
I also tried doing this
class Content(models.Model):
module = models.ForeignKey(Module, related_name='%(class)')
but that failed miserably as far as I could tell.
The simplest way might add a method to Blog model to return a Post queryset, like this:
The problem is you have to add method for every sub-model. The related_name seems only works for abstract base class.