Tôi có hai bảng, một "Công ty" và một "nhân viên":Làm cách nào để chọn từ nhiều bảng trong một truy vấn bằng 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)
Và tôi muốn liệt kê mọi nhân viên trong một bảng, với Công ty bên cạnh nó. Đó là đủ đơn giản bằng cách gọi employees = Employee.objects.all()
và trong vòng lặp mẫu máng nó và gọi {{employee.company.name}}
.
Vấn đề với giải pháp này là nó sẽ được tạo truy vấn mới cho từng mục trong vòng lặp. Vì vậy, đối với mỗi người lao động sẽ có một truy vấn cho Công ty tìm kiếm một cái gì đó như thế này:
SELECT `company`.`id`, `company`.`name`
FROM `company`
WHERE `company`.`id` = 1 # This will of course be the employee.company_id
Thay vào đó tôi muốn thực hiện này tham gia ban đầu ở cùng một truy vấn nhận được nhân viên. Một cái gì đó như thế này:
SELECT `employee`.`name` AS `name`,
`company`.`name` AS `company_name`
FROM `employee` INNER JOIN `company` ON `employee`.`company_id` = `company`.`id`
Điều này có thể thực hiện với Bộ truy vấn Django không? Nếu không, có cách nào tôi có thể làm việc xung quanh để giải quyết này (không có sql nguyên)? Hoặc hành vi này có nên được bỏ qua, được lưu trong bộ nhớ cache và được xem là "tối ưu hóa" không?
Tôi đã đọc tài liệu lên xuống, nhưng đã hoàn toàn bỏ lỡ phần này. Vâng cảm ơn rất nhiều! Điều đó thật đáng xấu hổ. – tdolsen