2017-03-08 6 views
0

バックエンドでdjango 1.10とmongodbを使用しています。 mongodengについては、私はmongoengine 0.11を使用しています。 mongodbには "test_coll"という名前のコレクションがあり、 "name"、 "dept"、 "tag"というフィールドがあります。私はこのリストは動的で、リストにDjangoクエリセットフィルタリング、動的リストのデータをフィルタリングする方法

dept_list=['dev','tester'] 

を提供しています

name dept tag 
peter dev  k1 
mark tester k1 
sachin dev  k1 
amit manager k1 

フォローとして、コレクションからのサンプルデータがあります。以下は

リストdept_list=['dev','tester']と上記のサンプルデータを1として機能

from mongoengine import Q 
dept_list=['dev','tester'] 
output_list = [] 
query_dept objects = Q() 
    for dl in dept_list: 
     query_objects |= Q(dept__iexact=dl)    
    for details in test_coll.objects.filter(((Q(tag__iexact='k1')) & query_objects)): 
     output_list.append({'name':details.name,'dept':details.dept,'tag':details.tag}) 
return output_list 

からのコードですが、私はタグが「DEV」、「テスター」であり「K1」とDEPTあるコレクションから詳細を取得します。

dept_list=['']に空の文字列が含まれている場合、私はスタックされているので、tag = 'k1'のすべてのデータを返す必要があります。私の場合は何も返されていません。 誰でもソリューションを提供できますか?前もって感謝します。

答えて

0

だから dept_list = filter(lambda item: item != '', dept_list)

変更されたコードは

from mongoengine import Q 
dept_list=[''] 
query_dept objects = Q() 
for dl in dept_list: 
    query_objects |= Q(dept__iexact=dl)    
for details in test_coll.objects.filter(((Q(tag__iexact='k1')) & query_objects)): 
    output_list.append({'name':details.name,'dept':details.dept,'tag':details.tag}) 
return output_list 

だから、これは予想される出力を与えるれたままです。

0

''はdept_listの項目です:の意味ではありません。です。空のリストは[]です。したがって、その項目がリストにある場合は、フィルタリングを行わないことを確認する条件を作成する必要があります。deptの値が''でないためです。リストにそのアイテムがある場合は、ポップしてください。

実際には、SQLクエリは次のようになります。SELECT * FROM test_coll WHERE tag="k1" AND dept="";。私はちょうどそれがSELECT * FROM test_coll WHERE tag="k1";になるとコメントした変更を行う。 dept_list = ['']その後 私はリストから空の文字列を削除しなければならなかったとき

+0

うん。私は考え出した。手伝ってくれてありがとう。 :) – sachin27

関連する問題