我有两张桌子,一张是"公司",一张是"员工":
class Company(models.Model):
name = models.CharField(max_length=60)
class Employee(models.Model):
name = models.CharField(max_length=60)
company = models.ForeignField(Company)
Run Code Online (Sandbox Code Playgroud)
我想在表格中列出每个员工,旁边有公司.这很简单,通过调用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
Run Code Online (Sandbox Code Playgroud)
相反,我希望最初在获取Employees的同一查询中进行此连接.像这样的东西:
SELECT `employee`.`name` AS `name`,
`company`.`name` AS `company_name`
FROM `employee` INNER JOIN `company` ON `employee`.`company_id` = `company`.`id`
Run Code Online (Sandbox Code Playgroud)
这是否可以使用Django QuerySet?如果没有,有没有办法解决这个问题(没有原始的sql)?或者是否应忽略此行为,缓存并将其视为"优化"?