У меня есть две таблицы, одна "Компания" и один "Сотрудник":
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)? Или следует игнорировать это поведение, кэшировать и считать "оптимизированным"?