Mam dwie tabele, jeden „Spółka” i jeden „pracownika”:Jak wybrać z wielu tabel w jednym zapytaniu z 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)
I chcę wymienić każdy pracownik w tabeli, ze Spółką obok niego. Co jest dość proste, wywołując employees = Employee.objects.all()
oraz w pętli szablonu przez to i wywołując {{employee.company.name}}
.
Problem z tymi rozwiązaniami polega na tym, że zostanie utworzone nowe zapytanie dla każdego elementu w pętli. Więc dla każdego pracownika będzie jedno zapytanie do Spółki poszukuje czegoś takiego:
SELECT `company`.`id`, `company`.`name`
FROM `company`
WHERE `company`.`id` = 1 # This will of course be the employee.company_id
Zamiast tego życzę, aby ta dołączyć początkowo w tej samej kwerendy uzyskiwanie pracowników. Coś takiego:
SELECT `employee`.`name` AS `name`,
`company`.`name` AS `company_name`
FROM `employee` INNER JOIN `company` ON `employee`.`company_id` = `company`.`id`
Czy to możliwe z Django queryset? Jeśli nie, czy istnieje sposób, w jaki mogę rozwiązać ten problem (bez surowego sql)? Czy powinno to być ignorowane, buforowane i uważane za "zoptymalizowane"?
Przeczytałem dokumentację w górę iw dół, ale udało mi się całkowicie pominąć tę część. Cóż, dziękuję bardzo! To było krępujące. – tdolsen