我有两张表,一张是“公司”,一张是“员工”:
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/