是否可以通过父模型查询所有子对象,并最终得到查询集中每个元素的子类.

models.py

class employee(models.model):
    first_name=models.CharField(max_length=30)
    last_name=models.CharField(max_length=30)
    def __str__(self):
        return self.first_name
class teacher(employee):
    school=models.CharField(max_length=30)
    district=models.CharField(max_length=30)
    subject=models.CharField(max_length=30)
class doctor(employee):
    hospital=models.CharField(max_length=30)
    specialty=models.CharField(max_length=30)

如果我查询所有员工

queryset = employee.objects.all()

如何在不查询子类的情况下获取每个员工的子类.

子类是否使用父模型中的字段进行表示

推荐答案

您可以使用.select_related(…) [Django-doc]来获取同一查询中的teacher和/或doctor的数据,因此:

queryset = employee.objects.select_related('doctor', 'teacher')

如果这是一个子类,则try 访问该属性:

for item in queryset:
    try:
        doctor_details = item.doctor
    except AttributeError:
        pass  # not a doctor

这基本上就是django-polymorphic package [PyPI] 在内部做到了.

Django相关问答推荐

Django Model邮箱字段是必需的,即使在我将其设置为NULL=True和BLACK=True之后也是如此

django 无法识别实现自定义后端

在 Django 中按月份和年份对帖子进行分类

根据当前对象中的多对多字段过滤对象

如何连接到 docker 容器中的 postgres 数据库?

如何在Django中制作一个不 Select 以前日期的日期 Select 器

恢复 Django 1.7 RemoveField 迁移

Django 基于角色的视图?

(fields.E300) 字段定义与模型的关系,该模型要么未安装,要么是抽象的

Django - 如何从模型中 Select 特定列?

Django BigInteger自动增量字段作为主键?

Django 模板列表的第一个元素

Django:使用render或render_to_response时添加响应头

在 django 模板中访问元组

在 docker 容器中创建 django 超级用户而不输入密码

如何使 Django QuerySet 批量删除()更高效

import_module 的 Django 1.9 ImportError

Django:在还原(迁移)后try 访问数据库时权限被拒绝

AUTH_USER_MODEL 指的是尚未安装和创建的模型 .. AbstractUser 模型无法登录

Django 测试 - 在所有测试中修补对象