問題タブ [django-q]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
722 参照

django - Djangoでの複雑なQオブジェクトフィルタークエリの奇妙な動作

こんにちは私はDjangoのタグ付けシステムを作成しようとしていますが、今日、フィルターまたはQオブジェクト(django.db.models.Q)で奇妙な動作が発生しました。

検索文字列をQオブジェクトに変換する関数を作成しました。次のステップは、これらのクエリでTaggedObjectをフィルタリングすることです。しかし、残念ながら私は奇妙な振る舞いをします。

1つのタグ要素のみを検索します。

検索(id=20)=> Q: (AND: ('tags__tag__id', 20)) すると、IDが1127と132の2つのタグ付きオブジェクトが返されます。

(id=4)=> を検索するQ: (AND: ('tags__tag__id', 4)) と、2つのオブジェクトも返されますが、今回は1180と1127です。

これが、relutingSQLクエリです。

'または'接続詞で2つのタグを検索します。

(id=4) or (id=20)ここまではすべて問題ありませんが、 => のようにもう少し複雑なクエリを実行すると、Q: (OR: ('tags__tag__id', 4), ('tags__tag__id', 20)) 4(!)オブジェクト1180、1127、1127、132が返されます。

およびSQL:

しかし、ID 1127のオブジェクトは2回返されますが、それは私が望む動作ではありません。私はそれと一緒に暮らす必要があり、そのリストを統一する必要がありますか、それとも私は別のことをすることができますか?Qオブジェクトの表現は私にはうまく見えます。

2つのタグ'と'接続詞を検索します

しかし、最悪の場合、(id=20) and (id=4)=> を検索するとQ: (AND: ('tags__tag__id', 20), ('tags__tag__id', 4))、オブジェクトがまったく返されません。しかし、なぜ?表現は問題なく、ID1127のオブジェクトは両方でタグ付けされている必要があります。私は何が欠けていますか?

これがSQLです。

[編集]: このSQLステートメントが間違っていることに気づきました。少なくとも私が望むものではありません。ここでは、1つのObjectTagBridgeのIDが4であり、同時にIDが20であるためです。しかし、私の場合、これらは2つの異なるものです。

関係するクラスの関連部分もここにあります:

ご協力いただきありがとうございます

0 投票する
2 に答える
560 参照

django - QでMany2Many/Generic Relationsを適切にフィルタリングする方法は?

3つのモデルがあり、TaggedObjectにはObjectTagBridgeとのGenericRelationがあります。また、ObjectTagBridgeにはタグモデルへの外部キーがあります。

タグをオブジェクトにアタッチするときは、新しいObjectTagBridgeを作成し、そのForeignKeyタグをアタッチするタグに設定します。これは正常に機能しており、オブジェクトに添付したすべてのタグを非常に簡単に取得できます。しかし、Tag1とTag2を持つすべてのオブジェクトを取得(フィルタリング)したい場合は、次のようにしようとしました。

しかし、私のobject_listは空です。これは、2つのタグオブジェクトを持つ1つのObjectTagBridgeを持つTaggedObjectsを探しているためです。最初のオブジェクトはTag1で、2番目のオブジェクトはTag2です。

私のアプリケーションはこれよりも複雑なQクエリになるので、このQオブジェクトを使用したソリューションが必要だと思います。実際、次のようなバイナリ接続詞の任意の組み合わせ:(...) and ( (...) or not(...))

これを正しくフィルタリングするにはどうすればよいですか?すべての答えは大歓迎です、多分これを達成するための別の方法もあります。

あなたの助けのためのthx!!!

0 投票する
1 に答える
3541 参照

django - スペースを含む文字列のDjango検索

検索が名または姓に一致する場合、1人の名前を返す必要がある名前関数による検索があります。問題は、「firstname lastname」のような文字列を検索すると、一致する名前が見つからないことです (単語間のスペースが原因だと思います)。検索を機能させるにはどうすればよいですか? また、同じ検索でユーザー名 (別のテーブルにあります) で検索したい場合はどうすればよいですか? どうもありがとう!

私のコード:

0 投票する
1 に答える
543 参照

django - Django - QuerySet を Q オブジェクトに変換する方法は?

djangoでQuerySetをQオブジェクトに変換する方法はありますか?

私の具体的な動機: 別の QuerySet (qs_B) から 1 つの QuerySet (qs_A) を減算したいと考えています。私が考えることができる唯一の方法は、exclude() と qs_A に相当する Q オブジェクトを使用することです。

例:

0 投票する
1 に答える
266 参照

python - Q()オブジェクトをリクエストする

コードとTracebeckがあります。私が間違っているのは何ですか?

0 投票する
4 に答える
56906 参照

python - AND と OR を Q オブジェクトと組み合わせた Django クエリ フィルタは、期待される結果を返さない

Q オブジェクトを使用して、フィルターで AND と OR を結合しようとしています。|のように見えます AND のように動作します。これは、サブクエリとしてではなく、同じクエリで実行される前の注釈に関連しています。

Djangoでこれを処理する正しい方法は何ですか?

models.py

ビュー.py

結果の SQL クエリ

予期される SQL クエリ


EDIT:予想されるSQLクエリを追加しました(equipment_subcategoryの結合なし)

0 投票する
1 に答える
2255 参照

django - Django SQLまたはfilter()およびQ()経由:動的?

Django Webサイトで単純なLIKE検索を実装していますが、現在使用しているのは次のコードです。

文字列はどこqueryにありますか。これによりLIKESQLステートメントが生成され、問題なく機能します。次に、検索クエリを用語または単語に分割したいと思います。

これwordsで単語のリストが含まれ、次のようなSQLステートメントを実現したいと思います。

また、単語が2つ以上ある場合は、ステートメントを増やして、すべてのエントリをすべての単語ごとにリストするようにします。

何か案は?ありがとう!

0 投票する
2 に答える
9748 参照

django - django の Q オブジェクトと '&' 演算子

興味深い問題があります。

私は3つのオブジェクトを持っています。すべて同じ

だから私は3つの記事を持っています。すべて同じタグ: 'tag1' と 'tag2'

そして、私は質問があります

これにより、すべての記事が表示されます。両方のタグがあるため、各記事を 2 回収集するため、distinct() なしで 6 つの記事を返します。

ただし、このクエリでは:

これは私に記事を与えません。記事には両方のタグが含まれているため、それらすべてを返す必要がありますか?

0 投票する
1 に答える
1522 参照

django - 注釈付き QuerySet での Q オブジェクトによるフィルタリング

模擬テストケース:

出力:

なぜ | オペレーターはこのように動作を変更しますが、どうすれば修正できますか?

0 投票する
1 に答える
305 参照

django - DjangoのORMがQを使用するのはいつですか?

DjangoのQ機能を使用してANDおよびORSQLクエリを生成しようとしていますが、残念ながら、Djangoがいつどのように条件文を生成するのか理解できないようです。もっと複雑なクエリがありましたが、何が起こっているのかを確認するためにそれを整理することにしました。

Q()のない例:

そして今Q():

そして、これがdjango.db.connectionから生成するクエリ:

そして、別の値を追加します。

しかし、その順序を逆にすると、次のようになります。

SQLの場合:

したがって、毎回最初のQ値を無視しているように見えますが、これは予想される動作ですか?