Làm cách nào để thực hiện ít hơn hoặc bằng bộ lọc trong bộ truy vấn Django?


175

Tôi đang cố gắng lọc người dùng theo một trường tùy chỉnh trong mỗi hồ sơ người dùng được gọi là hồ sơ. Trường này được gọi là cấp và là một số nguyên trong khoảng 0-3.

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

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

Khi tôi cố gắng lọc bằng cách sử dụng ít hơn:

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

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

tên toàn cầu 'userprofile__level' không được xác định

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


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

@ BéresBotond Thật không may liên kết đó đã chết :(
dKen

Câu trả lời:


336

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, ltcho ít hơn và gtlớn hơn. Bạn có thể tìm thấy tất cả trong tài liệu .


2
Ồ nó rất nhanh :). Điều này hoạt động tuyệt vời cho ít hơn hoặc bằng, nhưng làm thế nào về ít hơn? (userprofile__level__lt = 3) dường như không hoạt động
Fingerlish

1
Nó làm; 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).
Lakshman Prasad

2
Và đừng quên rằng có hai phần __gạch chân
andilabs

Tôi gặp lỗi này -> {FieldError} Tra cứu 'cấp' không được hỗ trợ cho AutoField hoặc tham gia vào trường không được phép.
Aravind R Pillai
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.