2009-03-23 5 views
6

Django에는 QuerySets 용 복잡한 사용자 정의 필터를 작성하는 표준 방법이 있습니까?Django Custom Queryset 필터

나는

MyClass.objects.all().filter(field=val) 

나는 이런 식으로 뭔가 할 싶습니다 쓸 수있는 것처럼 :

MyClass.objects.all().filter(customFilter) 

내가 발전기 표현

(x for x in MyClass.objects.all() if customFilter(x)) 

를 사용할 수를하지만 잃을 것 chainability 및 QuerySets에서 제공하는 다른 모든 기능.

답변

5

맞춤 managers이 필요할 수 있습니다.

+0

나는 이것이 필요하다고 생각한다. 그러나 비행 중에 필터 기능을 전달할 수있는 것보다 복잡합니다. – interstar

+0

매우 복잡하지는 않지만 커스텀 매니저를 만드는 것은 좋은 습관입니다. 특히 db 등에서 캐싱 할 계획이라면 더욱 그렇습니다. – Vasil

13

관리자 방법을 사용하기 시작하는 것이 좋지만, 질문에 직접 대답하려면 예 : Q objects을 사용하십시오. 예 :

from django.db.models import Q 

complexQuery = Q(name__startswith='Xa') | ~Q(birthdate__year=2000) 

MyModel.objects.filter(complexQuery) 

Q 오브젝트는 | (OR), & (AND) 및 ~ (NOT)입니다.