假设我有一个如下所示的抽象基类:
class StellarObject(BaseModel):
title = models.CharField(max_length=255)
description = models.TextField()
slug = models.SlugField(blank=True, null=True)
class Meta:
abstract = True
Run Code Online (Sandbox Code Playgroud)
现在,假设我有两个从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)
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.如果我想获得行星或星星,我所做的就是:
Thing.objects.all() #or
Thing.objects.filter() #or count(), etc...
Run Code Online (Sandbox Code Playgroud)
但是如果我想获得所有StellarObjects呢?如果我做:
StellarObject.objects.all()
Run Code Online (Sandbox Code Playgroud)
它当然会返回错误,因为抽象类不是实际的数据库对象,因此无法查询.我读过的所有内容都说我需要做两个查询,一个是行星和星星,然后合并它们.这似乎非常低效.这是唯一的方法吗?
我正在我的django模型中使用子类,如下所示:
class Person(models.Model):
name = models.CharField(max_length=100)
...
class Butcher(Person):
...
class Driver(Person):
...
Run Code Online (Sandbox Code Playgroud)
在我看来,我想根据Person-class的子类做某些事情,如下所示:
def person_detail_view(request, slug):
person = Person.objects.get(slug=slug)
if person.butcher:
...
elif person.driver:
...
Run Code Online (Sandbox Code Playgroud)
但是当Person是一个驱动程序时,这给了我一个DoesNotExist-Error.有没有办法向Person类询问其子类?
先谢谢雅克