J'ai deux tables, une « société » et un « employé »:Comment sélectionner plusieurs tables dans une requête avec 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)
Et je veux énumérer tous les employés d'une table, avec la Société à côté de lui. Ce qui est assez simple en appelant employees = Employee.objects.all()
et dans la boucle de modèle et en appelant {{employee.company.name}}
.
Le problème avec cette solution est qu'il sera créé une nouvelle requête pour chaque élément de la boucle. Ainsi, pour chaque employé, il y aura une requête à la recherche entreprise quelque chose comme ceci:
SELECT `company`.`id`, `company`.`name`
FROM `company`
WHERE `company`.`id` = 1 # This will of course be the employee.company_id
Au lieu de cela, je tiens à le faire se joindre d'abord dans la même requête obtenir les employés. Quelque chose comme ceci:
SELECT `employee`.`name` AS `name`,
`company`.`name` AS `company_name`
FROM `employee` INNER JOIN `company` ON `employee`.`company_id` = `company`.`id`
Est-ce possible avec le Django QuerySet? Sinon, y a-t-il un moyen de contourner ce problème (sans sql brut)? Ou ce comportement devrait-il être ignoré, mis en cache et considéré comme "optimisé"?
J'ai lu la documentation de haut en bas, mais j'ai raté complètement cette partie. Eh bien merci beaucoup! C'était embarrassant. – tdolsen