0

フォームから投稿されたデータを検索基準として取得し、それらの基準に従ってモデルをフィルタリングするクエリを作成したいと考えています。例

<form>
    <first_name input>
    <middle_name input>
    <last_name input>        
</form>

私が望んでいた動作は、 end all クエリと一致するビューですが、値がある場合にのみです。つまり、ユーザーが名の入力のみを完了して名のみを使用して検索する場合、ミドルネームが指定されている場合は両方の基準を使用して検索するなどです。私の考えはこれを手動で行うことですが、あまり良くありません。

if first_name != '' and middle_name='' and last_name='':
    return filtering only with name
elif etc....

それは建設的でも正しくもありません。ジャンゴでこれを行う別の方法はありますか?空の文字列でない場合にのみクレテリアを使用するには。

4

2 に答える 2

0

私の解決策は次のとおりでしたが、正しいかどうか教えてください。

model.objects.filter(
                     Q(first_name__icontains=fist_name) &
                     Q(middle_name__icontains=middle_name) &
                     Q(last_name__icontains=last_name)
                    )

投稿データが空の文字列の場合はすべて一致しますが、他のいずれかが空の文字列でない場合は、その基準で結果をフィルタリングします。そう

例えば

first_name=''
last_name = 'Jones'
middle_name='Paul'

それから

first_name matches all
but it extracts only thouse who their middle name is Paul and last name Jones
ergo John Paul Jones

:P この方法では、データベース トランザクション時間のコストが高くなりますか?

于 2013-11-14T07:30:35.470 に答える