Tôi muốn nối thêm hoặc chuỗi một số Querysets trong Django, giữ nguyên thứ tự của mỗi một (không phải kết quả). Tôi đang sử dụng thư viện của bên thứ ba để phân trang kết quả và chỉ chấp nhận danh sách hoặc queryset. Tôi đã thử các tùy chọn này:Làm thế nào để chuỗi các truy vấn Django bảo quản thứ tự riêng lẻ
Truy vấn tham gia: Không bảo toàn trật tự trong các truy vấn riêng lẻ, vì vậy tôi không thể sử dụng điều này.
result = queryset_1 | queryset_2
Sử dụng itertools: Gọi list()
trên đối tượng chuỗi thực sự đánh giá queryset và điều này có thể gây ra rất nhiều chi phí. Phải không?
result = list(itertools.chain(queryset_1, queryset_2))
Bạn nghĩ tôi nên đi như thế nào?
tôi đang làm một Kết phức tạp trên cùng một mô hình tách ra ở một số truy vấn. Mỗi một truy xuất hồ sơ phù hợp với một điều kiện nhất định và mỗi một được sắp xếp theo một cách cụ thể. Kết quả phải bao gồm các kết quả từ mỗi queryset và phải duy trì thứ tự của mỗi queryset này. Vì vậy, tôi không thể sử dụng các đối tượng 'Q' ở đây, vì tôi sẽ không được phép thực hiện một số' order_by() 'trên cùng một truy vấn. Tôi muốn tránh gọi 'list()' trên mỗi queryset để tránh truy cập cơ sở dữ liệu, lấy quá nhiều đối tượng trong bộ nhớ. – Caumons
Bạn có nghĩ rằng có thể tạo một truy vấn SQL thuần túy để trả về một tập hợp các hàng được sắp xếp và lọc chính xác như bạn muốn không? Nếu không, thì một QuerySet đơn lẻ cũng không thể thực hiện được.Ví dụ: nếu bạn đặt hai tập hợp kết quả theo các cách không tương thích. Nếu bạn làm việc xung quanh sự không tương thích này bằng cách sử dụng một phép nối phức tạp từ hai bộ kết quả được sắp xếp rõ ràng, đó không phải là thứ mà django ORM có thể làm. – Demiurge
Tôi không muốn nhận được vào SQL tinh khiết nhiều như tôi có thể ở lại với ORM của Django. Tôi đã chỉ yêu cầu điều này để xem nếu có một lựa chọn tốt hơn cho những gì tôi đang làm (hiện đang sử dụng ví dụ thứ hai) với một truy vấn hạn chế để tránh có hàng ngàn đối tượng trong bộ nhớ. – Caumons