「Odooベーシックチュートリアルシリーズ」第5編-Todoアプリから(4)


前のチュートリアルでは、TreeViewとFormViewの2種類のビューを使用しました.今日は別のタイプのビュー(SearchView)を使用して、ビューを検索することを学びます.
検索フィールド
以前の実践を通して、Odooが私たちのモデルのためにデフォルトのTreeViewとFormViewを定義することを知っているでしょう.それは私たちが今日言う主役のSearchViewにも同じです.私たちはいずれのリストビューを開いても、リストの右上に検索ボックスが見えます.検索ボックスに文字を入力して検索できるほか、検索ボックスの右側の拡大鏡をクリックすると、フィルタ(Filters)、パケット(Group By)、コレクション(Favorites)など、より多くの検索機能が展開されます.その中で最もよく使われているのはフィルタです.後でお話しします.
デフォルトの検索ビューでは、モデルのnameフィールド(または_rec_nameで指定されたフィールド)のみが検索されます.たとえば、保留中のリストで検索すると、検索ボックスの下に自動的に検索項目が表示されます.ここで、「説明」は、保留中のtodo.tasknameフィールドです.
では、「分類」も待機事項の検索に使えるようにしたい場合は、どうすればいいのでしょうか.次に、ビューファイルを開き、検索ビューの基本構造を定義します.
    
    
        todo.task.view_filter
        todo.task
        
            
                ...
            
        
    

検索ビューは、リストビューおよびフォームビューと同様に、arch内の部分だけが似たような構造を持っています.次に、に検索したいフィールドを追加します.
    
        
        
    

超简単ありますか!検索に使用したいフィールドをに入れるだけでいいのですが、ここで注意しなければならないのは、デフォルトのビューを上書きすることに相当する検索ビューを自分で定義しているので、フィールドnameも追加する必要があります.そうしないと、処理対象の説明に基づいて検索することはできません.
モジュールをアップグレードして、入力ボックスに検索内容を入力して、何が変わったかを見てみましょう.
「作業」という分類を作成したことを覚えていますか.以下に示す「分類」の検索結果では、小さな三角記号をクリックすると、一致する関連結果が開きます.
フィルタ
Odooの検索ビューに付属するフィルタを見てみましょう.クリックすると、カスタムフィルタを追加するオプションが1つしか見えません.もう一度クリックすると、いくつかのオプションが表示されます.
ルールを勝手に追加して、アプリケーションをクリックして、何が起こるか見てみましょう(私はそれぞれ「緊急度」「is」「普通」を選択しました):
検索ボックスにこのフィルタが適用され、このフィルタがフィルタのオプションに追加されていることがわかります.また、いくつかのフィルタを追加してみてください.
以上の操作により,ここのフィルタは実際には1つのフィルタルールであり,複数の異なるルールを同時に適用できることが明らかになった.もし私たちが大量のデータを持っていて、特定のデータを迅速にフィルタしたいなら、フィルタを使ってこの目的を達成することができます.
他のメニューに切り替えたり、ページをリフレッシュしたりすると、以前に適用したフィルタが消えていることがわかります.あるデータでフィルタ操作を高頻度で行う必要がある場合は、毎回手動でフィルタルールを追加すると不便になりますので、検索ビューでフィルタを定義する方法を見てみましょう.
    
        
        
        
        
        
        
        
        
        
    
に5つのフィルタを追加しました.そのうちstringは表示された名前で、nameはデータベースに格納されている名前で、対応するフィルタを得ることができます.最も重要な属性はdomainです.Odooでの様々なフィルタリングはdomainによって実現され、論理接頭辞と式のメタグループからなるリストであり、domainの詳細については、ここでは展開せずに、後で専門的に書くべきである.
私たちは「未完成」というフィルタのdomainを例に、条件が何であるかにかかわらず、まず空のリスト[]を書きます.ここで覚えておきましょう.domainを使う場所であれば、まず中括弧[]を書きます.接触したばかりで括弧を少なく書いたため、プログラムにエラーが発生することがよくあります.
それから私たちはまず論理接頭辞のことを考えないで、私たちのところもしばらく使っていないので、この名詞を困らせないでください.さっき書いた空のリストに、カッコ()のペア、つまりメタグループを追加します.最も基本的な構造はすでにあります.今、式を書きます.私たちは1つの待機事項が完了したかどうかをマークするために使用します.フィールドis_doneを使用します.値がFalseであれば、この待機事項が完了していないことを示します.逆に、完了したことを示します.このルールに従って、フィールド名'is_done'(ここでは文字列であることに注意)を書き、次に式のオペレータ'='(ここでも文字列)を書きます.最後に、対応する値False(ここではブール値であり、文字列ではない)を書きます.
どうですか.簡単ではありませんか.ある学生が聞くかもしれませんが、なぜここは=号で==ではなく==号ですか.ここでは注意して慣れる必要があります.私たちが普段コードを書いて等しいと判断するときに=の2等号を使うのとは違って、domainの式で等しいと判断するのはの1等号です.覚えておいてください.
他のフィルターも同じように書くことができますので、もう一度よく理解してみましょう.また、上記のandというラベルを見てみましょう.検索フィールドとフィルタの間をグループ化する2つの役割があります.もう1つの役割は、検索フィールドとフィルタを論理的に接続することです.多くは実践的に明らかにするよりも、コードをアップグレードしてから、ページをリフレッシュして実際の効果を見てみましょう.
心の細いあなたはきっと発見して、完成したかどうかのフィルタと緊急度のフィルタは1本の分割線によって隔てられて、上のコードの中から私達はこの分割線がというラベルがインタフェースの上で表示する効果であることを見ることができます.同じグループ内のフィルタを同時にチェックすると、検索ボックス内のフィルタがorで接続されていることがわかります.これは、同じグループ内のフィルタが論理または(Pythonのor)で接続されることを示していますが、2つの異なるグループのフィルタを同時に選択すると、検索ボックス内のフィルタラベルが分離され、つまり、私たちが前に述べたように、論理で接続されています.
検索ボックスに内容を入力して検索し、フィルタの組み合わせを加えて効果を見てみましょう.何か見つかりましたか?検索ビューのコードを見てみると、の間にがありますね.
グループ化
フィールド検索とフィルタを使用すると、ほとんどのデータの検索要件を満たすことができます.ルールに従って必要なデータをフィルタリングする必要があるほか、データをパケット表示する必要がある場合があります.この場合、パケット(group by)機能を使用できます.
フィルタと同様に、グループ化機能は独自にカスタムグループを追加できますが、フィルタよりもずっと簡単になるには、フィールドを選択して適用するだけです.
検索ビューでグループ化されたアイテムを定義する方法を見てみましょう.
    
        ...
        
        
            
            
        
    

私达は1つのラベルを添加して、しかも中に2つのを添加して、目の先のあなたはきっと発见して、ここはフィルターとそっくりで、ただ1つのcontext属性が多くて、はい间违いなくて、パケットの肝心な点もこのcontext属性の中で、中は1つの辞书で、対応するキーの値は指定のフィールドによってパケットを表示します.
また、ここに残っているdomainを見て、中に式を追加して、どんな効果があるか見てみましょう.ここでは詳しくは言いません.早くモジュールをアップグレードして、ページをリフレッシュして効果を見てみましょう.
選択したパケット項目に従ってデータがパケット化され、デフォルトは折り畳まれていることがわかります.展開をクリックすると、対応するパケットの下のデータが表示されます.デフォルトの折り畳み動作はラベルのexpand属性によって決定され、1に設定するとデフォルトの展開になります.
複数のグループを同時に適用したり、グループとフィルタを組み合わせて使用したりして、結果をよく観察したり考えたりしてみてください.
でたらめを言う
以上が今回のチュートリアルの内容です.SearchViewにはもう一つのコレクション機能があります.私たちは今でも長い間使用していません.だから、後のチュートリアルで説明するつもりはありません.興味があれば、自分で使ってみて、公式のモジュールをインストールしたり、ソースコードを見たりして、関連する知識を勉強したりすることができます.
相変わらず、チュートリアルのコードはGitHub倉庫「Odoo-Tutorial-Demo」に更新されます.