2010-11-24 4 views
1

MyModel.objects.filter(field__icontains=value)は、fieldvalueが含まれるすべての行を返します。反対をする方法?つまり、fieldが含まれているすべての行をに返すクエリセットを作成します。valueDjango:渡された値にフィールドが含まれる行をフィルタリングする方法は?

好ましくは、カスタムSQLを使用せずに(つまり、ORMのみを使用する)、バックエンドに依存するSQLを使用しないでください。

答えて

3

field__icontainsなどがORMに直接コードされています。シンプルなバージョンは存在しません。

reference for QuerySetに記載されているwhereパラメータを使用できます。 DMBS間連結の標準的な方法がないことを心に留めておくか、もちろん

MyModel.objects.extra(where=["%s LIKE CONCAT('%%',field,'%%')"], params=[value]) 

:この場合

は、あなたのようなものを使用します。したがって、私が知る限り、バックエンド依存のSQLを回避するというあなたの要求を満たす方法はありません。

あなたが辞書のリストではなく、クエリセットで作業をして大丈夫なら、あなたは常に代わりにこれを行うことができます:

qs = MyModel.objects.all().values() 
matches = [r for r in qs if value in r[field]] 

を、これはもちろん、巨大なデータセットのための理想的ではありません。

関連する問題