小编tdo*_*sen的帖子

如何使用Django从一个查询中选择多个表?

我有两张桌子,一张是"公司",一张是"员工":

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)?或者是否应忽略此行为,缓存并将其视为"优化"?

python django join django-queryset

11
推荐指数
3
解决办法
3万
查看次数

标签 统计

django ×1

django-queryset ×1

join ×1

python ×1