Допустим, у меня есть абстрактный базовый класс, который выглядит следующим образом:
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()
Конечно, он возвращает ошибку, потому что абстрактный класс не является фактическим объектом базы данных и поэтому не может быть запрошен. Все, что я прочитал, говорит, что мне нужно сделать два запроса, по одному на Планеты и Звезды, а затем объединить их. Это кажется ужасно неэффективным. Это единственный способ?