Вы уверены, что наследование является правильным решением здесь? Как насчет этого?
class MyModel(models.Model):
foo = models.IntegerField()
parent = models.ForeignKey("self", null=True)
Затем вы можете запросить все объекты, которые являются родителями, как это:
parents = MyModel.objects.filter(parent__isnull=True)
children = MyModel.objects.filter(parent__isnull=False)
@ Алекс: фильтрация по типу не будет работать. Модель наследования Джанго не настолько богата. Например. с этими моделями:
class Parent(models.Model):
foo = models.CharField(max_length=5)
class Child(Parent):
bar = models.CharField(max_length=5)
Вы получаете это поведение:
In [1]: from myexample.models import Parent, Child
In [2]: p = Parent(foo='x')
In [3]: p.save()
In [4]: p2 = Parent(foo='y')
In [5]: p2.save()
In [6]: c1 = Child(bar='1', foo='a')
In [7]: c1.save()
In [8]: c2 = Child(bar='2', foo='b')
In [9]: c2.save()
In [10]: len(Parent.objects.all())
Out[10]: 4
In [11]: len([p for p in Parent.objects.all() if type(p) is Parent])
Out[11]: 4
In [12]: len(Child.objects.all())
Out[12]: 2