次の Django モデルの場合:
class Item(models.Model):
name = CharField(max_len=256)
description = TextField()
n 個の単語 ( ) のリストを受け取り、名前または説明のいずれかで各単語が見つかるword_list
項目のクエリセットを返すフィルター メソッドを定式化する必要があります。word_list
単一のフィールドでこれを行うのは簡単です。here で説明されている reduce テクニックを使用すると(これはfor
ループでも実行できます)、次のようになります。
q = reduce(operator.and_, (Q(description__contains=word) for word in word_list))
Item.objects.filter(q)
同じことをしたいのですが、各単語が名前または説明に表示される可能性があることを考慮してください。私は基本的に、単語ごとに 2 つのフィールドの連結を照会したいと考えています。これはできますか?
Postgresql に連結演算子があることを読みましたが、||
この目的を達成するためにこれを django で何らかの方法で利用できるかどうかはわかりません。
最後の手段として、2 つのフィールドの組み合わせを含む 3 番目の列を作成し、post_save
シグナル ハンドラーやsave
メソッドのオーバーライドを介して維持することができますが、このタイプの "検索インデックス」タイプの列。