2017-03-01 6 views
0

存在しない場合はアサートされませんQオブジェクトは、私は次のモデルを考えてみましょうdatecategory、およびsomethingでフィルタリングする単一Qオブジェクトですが、モデルに存在する場合のみフィルタを適用します。言い換えればジャンゴ1つ以上のフィールドが

、私はこのフィールドはBには存在しないためBsomethingフィルタが無視されるだけのこと、両方ABモデルに適用することができ、単一のQ

私は素朴な実装をしようとすると、その中に例えばdateQcategorysomethingBモデルに適用されたとき、私は次のエラーを取得する:

B本当にドンので、理にかなって

FieldError: Cannot resolve keyword 'something' into field. Choices are...

フィールドにsomethingという名前のフィールドがあります。しかし、私はその動作を変更して動作させ、例外をスローするのではなく存在しないフィールドを無視したい。

これは可能ですか?

答えて

1

号しかし、あなたは、モデルのフィールドを検査し、適切なQオブジェクトを生成する関数を書くことができます。非常に興味深いソリューションです

def content_query(model, value): 
    allowed = ['date', 'category', 'something'] 
    model_fields = [f.name for f in model._meta.fields and f.name in allowed] 

    return Q(**{f: value for f in model_fields}) 
+0

:ような何か!私がやり遂げたのは、モデルタイプがキーであり、値がわずかに異なる質問の辞書でしたが、私はあなたが提案した方法が好きです。次回はこれらのモデルのQオブジェクトを書きます。 –

関連する問題