2016-10-05 9 views
0

オブジェクトデータをフィルタリングしながら、djangoでORという条件のフィルタを使いたいです。djangoのフィルタを条件とする

私はクラスのオブジェクトを持っており、私は基本的にDjangoのORの条件でデータをフィルタリングしたい3つまたは4つのフィールドを持っています。

たとえば、

Obj = Books.objects.filter(title=title or price=price or description=description or author=author) 

これはフィルタを実行する正しい方法ではないと思います。私のジャンゴフィルタに

答えて

2
from django.db.models import Q 

Obj = Books.objects.filter(Q(title=title) | Q(price=price) | Q(description=description) | Q(author=author)) 

ドキュメントをOR条件を使用するための適切な方法は何ですか

http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects 出典:これは私がすべてのfiled.Ifを渡す場合、私は合格取り組んでいるhttps://stackoverflow.com/a/739922/4808939

+0

1または2に私に次のエラーが表示されます。「クエリの値としてNoneを使用できません」 – vikrant

+0

上記のサンプルコードでは、タイトルのみを渡すとエラーになります。Noneをクエリの値として使用できません。 – vikrant

+0

@vikrant空のクエリ値を許可しますか?その場合は、それらをQオブジェクトに渡す前にそれらをサニタイズする必要があります。同様に: 'title = titleまたは' ''。 'None'の場合、値は空の文字列に置き換えられます。 空白の値を気にしない場合は、条件付きでOR結合されたクエリを作成する必要があります。 – wholevinski