Django 쿼리 세트에서 필터 이하를 수행하는 방법은 무엇입니까?


175

프로파일이라는 각 사용자 프로파일의 사용자 정의 필드로 사용자를 필터링하려고합니다. 이 필드는 레벨이라고하며 0-3 사이의 정수입니다.

equals를 사용하여 필터링하면 예상대로 선택한 수준의 사용자 목록이 표시됩니다.

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

미만을 사용하여 필터링하려고 할 때 :

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

오류가 발생합니다.

글로벌 이름 'userprofile__level'이 정의되지 않았습니다

<또는>로 필터링하는 방법이 있습니까, 아니면 잘못된 트리를 짖고 있습니까?


2
@ BéresBotond 문서는 훌륭해 보이지만-구조 및 레이아웃이 너무
나빠서

@ BéresBotond 불행히도 그 링크는 이제 죽었습니다 :(
dKen

답변:


337

작거나 같음 :

User.objects.filter(userprofile__level__lte=0)

크거나 같음 :

User.objects.filter(userprofile__level__gte=0)

마찬가지로 lt보다 작거나 gt크다. 문서에서 모두 찾을 수 있습니다 .


2
와우, 그것은 빠르다 :). 이것은 작거나 동등하게 훌륭하게 작동하지만 어떻습니까? (userprofile__level__lt = 3)가 작동하지 않는 것 같습니다
Finglish

1
그렇습니다; 그러나 어떤 경우에도 filter (__ lt) 대신 exclude (__ gte)를 수행 할 수도 있습니다.
Lakshman Prasad

2
그리고 두 가지 __밑줄 이 있다는 것을 잊지 마십시오
andilabs

이 오류가 발생했습니다-> {FieldError} 자동 필드에 대한 지원되지 않는 조회 '레벨'또는 필드에 대한 조인이 허용되지 않습니다.
Aravind R Pillai
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.