python - 如何使用 Django 在一个查询中从多个表中进行选择?

标签 python django join django-queryset

我有两张表,一张是“公司”,一张是“员工”:

class Company(models.Model):
    name = models.CharField(max_length=60)

class Employee(models.Model):
    name = models.CharField(max_length=60)
    company = models.ForeignField(Company)

我想在表格中列出每个员工,并在其旁边列出公司。这很简单,只需调用 employees = Employee.objects.all() 并在模板循环中遍历它并调用 {{employee.company.name}}

此解决方案的问题在于它将为循环中的每个项目创建一个新查询。因此,对于每一位员工,都会有一个类似这样的对公司的查询:

SELECT `company`.`id`, `company`.`name`
FROM `company`
WHERE `company`.`id` = 1 # This will of course be the employee.company_id

相反,我希望最初在获取员工的同一个查询中进行此连接。像这样:

SELECT `employee`.`name` AS `name`,
       `company`.`name` AS `company_name`
FROM `employee` INNER JOIN `company` ON `employee`.`company_id` = `company`.`id`

Django QuerySet 可以做到这一点吗?如果没有,有没有办法解决这个问题(没有原始 sql)?还是应该忽略、缓存此行为并将其视为“优化”?

最佳答案

使用 select_related()将预填充适当的属性:

Employee.objects.select_related()

关于python - 如何使用 Django 在一个查询中从多个表中进行选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2425603/

相关文章:

python - pyinstaller:使用 matplotlib 构建 python exe

django - 类型错误 : 'RegexValidator' object is not iterable

mySQL NATURAL JOIN 显示类似于 LEFT OUTER JOIN 的结果

python - 如何仅使用 Python 获取视频 flv 片段的所有 url?

java - Tflite 模型在 Android(ml 视觉)和 Python 中提供不同的输出

python - Azure SDK Python,我想将多个端口分配给 NSG 安全规则

django-rest-framework - APIView 中的 "perform_create"相当于什么

python - Django - 用户全名作为 unicode

MYSQL 多表连接查询优化U

mysql - 缩短 SQL COUNT 语句