2016-11-15 12 views
5

Tôi đang tạo một bộ truy vấn Django bằng tay và muốn chỉ sử dụng ORM Django để đọc kết quả SQL querset.query chính nó mà không cần nhấn DB của tôi.Làm cách nào để biết liệu một Bộ đếm Django đã được đánh giá?

Tôi biết Django quersets là lười biếng và tôi thấy tất cả các ops kích hoạt một queryset đang được đánh giá:

https://docs.djangoproject.com/en/1.10/ref/models/querysets/#when-querysets-are-evaluated

... Nhưng những gì nếu tôi chỉ muốn xác minh mã của tôi là hoàn toàn xây dựng queryset ruột nhưng ISN'T đánh giá và đánh DB của tôi chưa vô tình? Có bất kỳ thuộc tính nào trên đối tượng queryset mà tôi có thể sử dụng để xác minh nó không được đánh giá mà không thực sự đánh giá nó không?

+0

Tôi không nghĩ vậy, tôi đoán không cần trường hợp sử dụng như vậy. Tại sao bạn cần một tính năng như vậy? –

+0

Tôi có các ứng dụng khác cho SQL mà ORB của Django tạo ra hơn là thực sự đánh giá nó ngay lập tức. – slumtrimpet

Trả lời

5

Đối với truy vấn sử dụng select để trả về danh sách trường hợp mô hình, như bộ lọc cơ bản hoặc loại trừ, thuộc tính _result_cacheNone nếu bộ truy vấn chưa được đánh giá hoặc danh sách kết quả nếu có. Các thông báo trước về các thuộc tính không công khai sẽ được áp dụng.

Đối với các queryset khác (đếm, xóa, v.v.) Tôi không chắc chắn có một cách đơn giản. Có lẽ xem các bản ghi cơ sở dữ liệu của bạn, hoặc chạy trong chế độ DEBUG và kiểm tra connection.queries như đã mô tả ở đây: https://docs.djangoproject.com/en/dev/faq/models/#how-can-i-see-the-raw-sql-queries-django-is-running

+0

Hoàn hảo, cảm ơn rất nhiều. – slumtrimpet

+0

@slumtrimpet - được cập nhật để phản ánh rằng hoạt động cho các truy vấn sử dụng SQL 'SELECT' để truy xuất bản ghi, nhưng không nhất thiết cho tất cả truy vấn. –

1

Đối với những người muốn biết khiQuerySet s được đánh giá: đó là khi họ lặp, thái lát, ngâm hoặc cache, repr() 'd, len()' d, danh sách () 'ed hoặc bool() 'ed. Xem https://docs.djangoproject.com/en/1.10/ref/models/querysets/#when-querysets-are-evaluated

+2

Đó là liên kết mà OP đã đưa ra trong câu hỏi. Câu hỏi không phải là "khi nào Django đánh giá một queryset", câu hỏi là "Cho một đối tượng queryset, làm thế nào tôi có thể cho biết hay không nó đã được đánh giá". Xem mã nguồn để quan sát các thay đổi '_result_cache' như thế nào trong các hoạt động đó: https://github.com/django/django/blob/master/django/db/models/query.py –

+0

@PeterDeGlopper oh, vâng, tôi cũng vậy xin lỗi, bạn hoàn toàn đúng. Tôi sẽ chỉnh sửa câu trả lời để nó sẽ được thông tin cho những người muốn biết khi nào Django đánh giá nó. – feakuru

Các vấn đề liên quan