Điều đó có vẻ đơn giản, nhưng tất cả Truy vấn Django dường như là 'CHỌN *'Làm cách nào để giới hạn các cột được trả về bởi truy vấn Django?
Làm cách nào để tạo truy vấn chỉ trả lại một tập hợp con các trường?
Điều đó có vẻ đơn giản, nhưng tất cả Truy vấn Django dường như là 'CHỌN *'Làm cách nào để giới hạn các cột được trả về bởi truy vấn Django?
Làm cách nào để tạo truy vấn chỉ trả lại một tập hợp con các trường?
Trong Django 1.1 trở đi, bạn có thể sử dụng defer('col1', 'col2')
để loại bỏ các cột từ truy vấn, hoặc only('col1', 'col2')
để chỉ nhận được một tập hợp cụ thể của cột. Xem the documentation.
values
thực hiện điều gì đó hơi khác - nó chỉ nhận các cột bạn chỉ định, nhưng nó trả về danh sách từ điển thay vì tập hợp các phiên bản mẫu.
Nối một .values("column1", "column2", ...)
để truy vấn của bạn
Lưu ý: Nếu bạn sử dụng '.get()' thay vì '.filter()' để lấy một đối tượng cụ thể và muốn lấy các cột cụ thể, bạn cần đảm bảo '.values ('field1' ,. ..) 'được chỉ định TRƯỚC KHI phương thức' .get() '. Nếu sau đó, nó tạo ra một lỗi vì nó nhận các đối tượng và sau đó cố gắng chạy phương thức '.values ()' trên 'instance model' thay vì thuộc tính' objects'. – Furbeenator
Cảm ơn, cả hai đều có cách sử dụng. – philgo20
@Daniel, bạn có biết tại sao tài liệu nêu rõ các phương pháp này không? Nó nói rằng họ nên là phương sách cuối cùng, và các phương pháp khác nên được hết sức đầu tiên. – Furbeenator
câu hỏi hay ... – rom