Скажем, у меня есть абстрактный базовый класс, который выглядит так:
class StellarObject(BaseModel):
title = models.CharField(max_length=255)
description = models.TextField()
slug = models.SlugField(blank=True, null=True)
class Meta:
abstract = True
Теперь скажем, что у меня есть два реальных класса базы данных, которые наследуются от StellarObject
class Planet(StellarObject):
type = models.CharField(max_length=50)
size = models.IntegerField(max_length=10)
class Star(StellarObject):
mass = models.IntegerField(max_length=10)
До сих пор так хорошо. Если я хочу получить Планеты или Звезды, все, что я делаю, это:
Thing.objects.all() #or
Thing.objects.filter() #or count(), etc...
Но что, если я хочу получить ВСЕ StellarObjects? Если я это сделаю:
StellarObject.objects.all()
Он, конечно, возвращает ошибку, потому что абстрактный класс не является фактическим объектом базы данных и поэтому не может быть запрошен. Все, что я прочитал, говорит, что мне нужно сделать два запроса, по одному на планетах и звездах, а затем объединить их. Это кажется ужасно неэффективным. Это единственный способ?