2016-08-10 11 views
0

私は他の誰かが書いて設定したdjango rest-apiフレームワークに潜っています。私は良い解決策が見つからないという問題に遭遇しました。djangoはディクショナリフィールドに基づいてクエリセットをフィルタリングできますか?

"YAMLField"タイプのフィールドを含むモデルがあります。このフィールドメンバーを取得しようとしている間、それはOrderedDictに変換されます(この変換がどのように、どこで起こっているかはわかりません...)。

今、このモデルのクエリセットがあります。私は単純な属性に基づいてクエリーセットをフィルタリングする方法を理解していますが、この辞書に基づいてどのようにフィルタリングできますか?

例えば、(mymodelというインスタンスである)、このクエリセット内の各エントリは含まれています

MyModel.myDictionary == {'firstKey': 'firstVal', 'secondKey':'secondVal} 

今、私はこのクエリセットからすべてのエントリを取得したい:

myDictionary = {'firstKey': 'Something'} 

意味、私の辞書をフィルタリングするには、キーのサブセットのみを含めることができます。

私はクエリーセットを反復し、各エントリについて辞書を反復するために、それを行うための解決方法も簡単な方法も見つかりませんでした。 これはあまりにも多くのオーバーヘッドのように感じます...

+0

を確認したり、辞書のキーは、あなたはリストとしてすべてのキーを取得するにはmy_dictionary.keys()を使用し、それを使用することができ、モデルの主キーですMyModel.objects.filter(id__in = my_dictionary.keys())のようなクエリーセットフィールドのルックアップ。 PEP8スタイルの変数やフィールドには、CamelCaseではなく、下線を付けて名前を付けることを忘れないでください。 – Nerlin

+0

あなたの答えをありがとう。辞書キーはプライマリモデルキーではありません。辞書はモデルキーですが、辞書の内容に基づいてフィルタリングしたいと思います。 私は、これがYAMLFieldであるという事実を使用して終了し、その辞書からフィルタリングするすべての値を連結した後、そのフィールドで正規表現検索を行いました。 – orizis

答えて

0

これは可能です。詳細については、私はすべてを正しく理解している場合ジャンゴ休止フレームワークdoc

class MultipleFieldLookupMixin(object): 
    """ 
    Apply this mixin to any view or viewset to get multiple field filtering 
    based on a `lookup_fields` attribute, instead of the default single field filtering. 
    """ 
    def get_object(self): 
     queryset = self.get_queryset()    # Get the base queryset 
     queryset = self.filter_queryset(queryset) # Apply any filter backends 
     filter = {} 
     for field in self.lookup_fields: 
      filter[field] = self.kwargs[field] 
     return get_object_or_404(queryset, **filter) # Lookup the object 
+0

ありがとうございますが、私はそれが私が必要とするもののために働くかどうか、あるいは多分私はそれを完全に理解していないかもしれません。とにかく、私は私の質問のコメントに書いたように、別の解決策を見つけました。 再度お返事ありがとうございます – orizis

関連する問題