2011-08-25 13 views

答えて

8
Foo.objects.filter(**dict(bar)) 

これはdjangoの問題ではありません。これはPythonの問題です。キーワードのペアをキーワード引数(kwargs)としてフィルタに渡したいとします。あなたのbarです。はkwargに設定されていますので、dict(bar)は辞書に変換され、**という接頭辞は、辞書が受信者によってキーワード引数として解釈されることをPythonパーサーに知らせます。

スタックオーバーフローのエントリUnderstanding kwargs in Pythonはこれをより詳細にカバーしています。

+0

ありがとうございます! TypeErrorが発生します。filter()キーワードは文字列でなければなりません。 argsはユニコードで提供されるので、文字列に変換すると素晴らしい動作をします。 – panchicore

3

ANDまたはORにしたいかどうかは言いませんでした。 ANDがOKの場合は、そのリストを辞書に変換してフィルタに渡すだけです。

Foo.objects.filter(**dict(bar)) 
+0

ORはトリッキーです: 'Foo.objects.filter(reduce(operator.__ or__、[i in bar])))'は、これを達成するために私が知っている最短の方法です。 django.db.models.Qと演算子の両方をインポートする必要があります。 –

関連する問題