2011-09-21 39 views
44

Tôi có một bảng/mô hình được gọi là Employees và tôi muốn nhận tất cả các hàng của một trường đơn lẻ làm bộ truy vấn.mô hình django chọn trường đơn

Tôi biết tôi có thể làm điều đó như thế này (hy vọng tôi làm điều này phải chẵn):

emp_list = Employees.objects.get(all) 
emp_names = emp_list.eng_name 

Sẽ truy vấn cơ sở dữ liệu cho tất cả các lĩnh vực và chỉ sử dụng một? Có cách nào tốt hơn (nhanh hơn) để làm điều này?

+0

Bạn có ý nghĩa gì bởi "và chỉ sử dụng một"? 'SELECT col' thay vì' SELECT * '? –

Trả lời

83
Employees.objects.values_list('eng_name', flat=True) 

Tạo danh sách phẳng tất cả eng_name s. Nếu bạn muốn nhiều hơn một lĩnh vực cho mỗi hàng, bạn không thể làm một danh sách phẳng: điều này sẽ tạo ra một danh sách liệt kê:

Employees.objects.values_list('eng_name', 'rank') 
+0

cảm ơn câu trả lời, nếu tôi muốn chọn chỉ 1 hoặc nhiều trường (không phải tất cả)? – zentenk

+0

Xin lỗi, tôi không hiểu câu hỏi. –

+1

nevermind Tôi tìm thấy tài liệu, cảm ơn! – zentenk

4

Ngoài values_list như Danielmentions bạn cũng có thể sử dụng only (hoặc defer cho tác dụng ngược lại) để có được một queryset của các đối tượng chỉ có id của họ và các lĩnh vực quy định:

Employees.objects.only('eng_name') 

này sẽ chạy một truy vấn duy nhất:

SELECT id, eng_name FROM employees 
Các vấn đề liên quan