クエリセットは、後で実行されるSQLクエリとして参照する必要があります。クエリーセットを構築して結果を変数に保存すると、後でそれをさらにフィルタリングできますが、展開することはできません。より特定の規則(OR演算などが必要)を必要とするクエリが必要な場合は、クエリを作成するときにそれを記述する必要があります。これを行う1つの方法は、実際にQオブジェクトを使用することです。
しかし、クエリーセットが本当に何で、どのように使われているのか混乱しているようです。まず第一に:
Contact.objects.get(id = fild.f_for)
クエリセットを返すことはありませんが、たとえば、あなたがget
を使用するため、単一特定のレコードを要求しているため。クエリを取得するには、filter()を使用する必要があります。既存のクエリセットはactive_contacts
を言っていたし、あなたがそうあなただけの「ジョン」のFIRST_NAMEを持っている連絡先を取得し、それを絞り込むしたいのであれば、あなたはどうなる:もちろん
active_contacts = Contact.objects.filter(active=True)
active_contacts_named_John = active_contacts.filter(first_name='John')
あなたは1行でこれを行うことができますあまりにも、私はあなたのコードの最初のクエリーセットの構築を行うと仮定しています。
2番目の発言: watson
が質問セットの場合、filter()
のユーザーは不明です。これは実際に意味をなさない:
contact = watson.filter(contacts, searchline)
前述のように、クエリーセットをフィルタリングすると、別のクエリーセットが返されます。したがって、変数名として複数形を使用する必要があります。 contacts
。そして、フィルタの正しい使い方は次のようになります。私はここにsearchline
を想定してい
contacts = watson.filter(first_name=searchline)
は、ユーザ入力された検索語を含む変数です。だから多分ここであなたの変数をsearchterm
またはそれに類するものにするべきです。ワトソンがすでにフィルタリングしていて、first_nameがsearchline
と正確に一致するものによってフィルタリングされたすべての連絡先が返されます。あなたはまた、より多くの方法を解放し、そうのように、検索用語を「含む」という結果をフィルタリング使用することができます
contacts = watson.filter(first_name__contains=searchline)
希望、これはあなたが正しい道に乗ることができます。
私は "連絡"したいと思うquerysetは、この "contact = watson.filter(contacts、searchline)"とこのID "id = fild.f_for"を持つすべてのオブジェクトからすべてのオブジェクトを拘束します。更新された質問文 –
更新された質問と出力から、 '.filter()'に必須の位置引数があるので、 'watson'自体は普通のクエリセットではないようです。アプリケーションコードに 'filter'メソッドが定義されていますか? – nimasmi