2012-04-06 51 views
91

Tôi đang cố gắng lọc người dùng theo trường tùy chỉnh trong mỗi hồ sơ người dùng được gọi là tiểu sử. Trường này được gọi là cấp và là một số nguyên từ 0-3.Làm thế nào để thực hiện một bộ lọc nhỏ hơn hoặc bằng bộ lọc truy vấn Django?

Nếu tôi lọc sử dụng bằng, tôi nhận được một danh sách người dùng với mức độ lựa chọn như mong đợi:

user_list = User.objects.filter(userprofile__level = 0) 

Khi tôi cố gắng để lọc sử dụng ít hơn:

user_list = User.objects.filter(userprofile__level < 3) 

tôi nhận được lỗi :

global name 'userprofile__level' is not defined

Có cách nào để lọc theo < hoặc> hoặc tôi đang sủa nhầm cây.

+3

Bạn đã thử xem tài liệu - tuyệt vời - để xem cú pháp bộ lọc trong Django là gì? https://docs.djangoproject.com/en/1.4/ref/models/querysets/#gt –

+1

@ BéresBotond Mặc dù các tài liệu trông tuyệt vời - cấu trúc và bố cục quá kém mà không có liên kết trực tiếp, tất cả chúng đều vô dụng – RunLoop

+0

@ BéresBotond Thật không may rằng liên kết bây giờ đã chết: ( – dKen

Trả lời

172

Nhỏ hơn hoặc bằng:

User.objects.filter(userprofile__level__lte=0) 

Lớn hơn hoặc bằng:

User.objects.filter(userprofile__level__gte=0) 

Tương tự như vậy, lt cho ít hơn và gt cho lớn hơn. Bạn có thể tìm thấy tất cả in the documentation.

+2

Chà, nhanh quá :). Điều này làm việc tuyệt vời cho ít hơn hoặc bằng nhau, nhưng làm thế nào về chỉ ít hơn? (userprofile__level__lt = 3) dường như không hoạt động – Finglish

+0

Tại sao không. Nó có. –

+1

Nó có; nhưng trong mọi trường hợp, bạn cũng có thể loại trừ (__ gte) thay vì bộ lọc (__ lt). –

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