2009-03-23 7 views
6

Djangoには、クエリセットの複雑なカスタムフィルタを書くための標準的な方法がありますか?私はこのような何かをしたいと思いますDjangoカスタムクエリセットフィルタ

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

を書くことができるのと同じように

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

私はジェネレータ式

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

を使用することができますが、それを失うことになりますチェーン設定、および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)です。

関連する問題