Ich habe zwei Tabellen, eine „Gesellschaft“ und ein „Mitarbeiter“:Wie wähle ich aus mehreren Tabellen in einer Abfrage mit 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)
Und ich möchte jeden Mitarbeiter in einer Tabelle aufzulisten, mit der Gesellschaft daneben. Was einfach genug ist, indem man employees = Employee.objects.all()
aufruft und in der Template-Schleife durch {{employee.company.name}}
ruft.
Das Problem mit diesen Lösungen besteht darin, dass für jedes Element in der Schleife eine neue Abfrage erstellt wird. Also für jeden Mitarbeiter wird es eine Abfrage an das Unternehmen sein, etwas wie folgt aussehen:
SELECT `company`.`id`, `company`.`name`
FROM `company`
WHERE `company`.`id` = 1 # This will of course be the employee.company_id
Stattdessen möchte ich dies zunächst in der gleichen Abfrage machen kommen Sie mit den Mitarbeiter zu bekommen. Etwas wie dieses:
SELECT `employee`.`name` AS `name`,
`company`.`name` AS `company_name`
FROM `employee` INNER JOIN `company` ON `employee`.`company_id` = `company`.`id`
Ist das mit dem Django QuerySet möglich? Wenn nicht, gibt es einen Weg, um dieses Problem zu lösen (ohne rohe SQL)? Oder sollte dieses Verhalten ignoriert, zwischengespeichert und als "optimiert" betrachtet werden?
Ich habe die Dokumentation oben und unten gelesen, aber es geschafft, diesen Teil total zu vermissen. Vielen Dank! Das war peinlich. – tdolsen