相关疑难解决方法(0)

如何在Django中查询基于抽象类的对象?

假设我有一个如下所示的抽象基类:

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 abstract-class

46
推荐指数
4
解决办法
1万
查看次数

django访问模型的子类

我正在我的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类询问其子类?

先谢谢雅克

django subclass models

4
推荐指数
2
解决办法
3152
查看次数

标签 统计

django ×2

abstract-class ×1

models ×1

subclass ×1