จะกรองน้อยกว่าหรือเท่ากับในชุดคำถาม Django ได้อย่างไร


175

ฉันพยายามกรองผู้ใช้ตามฟิลด์ที่กำหนดเองในโปรไฟล์ผู้ใช้แต่ละโปรไฟล์ที่เรียกว่าโปรไฟล์ ฟิลด์นี้เรียกว่าระดับและเป็นจำนวนเต็มระหว่าง 0-3

หากฉันกรองโดยใช้เท่ากับฉันจะได้รับรายชื่อผู้ใช้ในระดับที่เลือกตามที่คาดไว้:

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

เมื่อฉันพยายามกรองโดยใช้น้อยกว่า:

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

ฉันได้รับข้อผิดพลาด:

ไม่ได้กำหนดชื่อโกลบอล 'userprofile__level'

มีวิธีการกรองโดย <หรือ> หรือฉันเห่าต้นไม้ผิด


2
@ BéresBotondถึงแม้ว่าเอกสารจะดูดี - โครงสร้างและเลย์เอาต์แย่จนไม่มีลิงค์โดยตรง แต่ก็ไร้ประโยชน์
RunLoop

@BéresBotondน่าเสียดายที่ลิงค์นั้นตายแล้ว :(
dKen

ลิงก์ที่ใช้งานได้สำหรับ doc: docs.djangoproject.com/en/1.11/ref/models/querysets/#gt
Gaurav Pandey

คำตอบ:


337

น้อยกว่าหรือเท่ากับ:

User.objects.filter(userprofile__level__lte=0)

มากกว่าหรือเท่ากับ:

User.objects.filter(userprofile__level__gte=0)

ในทำนองเดียวกันltสำหรับน้อยกว่าและgtมากกว่า คุณสามารถพบพวกเขาทั้งหมดในเอกสาร


2
ว้าวนั่นเร็วมาก :) มันใช้งานได้ดีน้อยกว่าหรือเท่ากับ แต่น้อยกว่าล่ะ? (userprofile__level__lt = 3) ดูเหมือนจะใช้งานไม่ได้
Finglish

1
มันทำ; แต่ในกรณีใด ๆ คุณสามารถยกเว้น (__ gte) แทนตัวกรอง (__ lt)
Lakshman Prasad

2
และอย่าลืมว่ามี__ขีดเส้นใต้สองเส้น
andilabs

ฉันได้รับข้อผิดพลาดนี้ -> {FieldError} ไม่รองรับ 'ระดับ' การค้นหาสำหรับ AutoField หรือเข้าร่วมในฟิลด์ที่ไม่ได้รับอนุญาต
Aravind R Pillai
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.