問題タブ [django-managers]

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 に答える
397 参照

django - Djangoでカスタムマネージャオブジェクトが機能しない?

これが私modelsmanagerクラスです。問題は下にあると思いPostingFilterManagerます。title彼らは私がキーワードを検索する方法body_textが間違っています。以下のモデルkeywordstitleおよびモデルのリストを照会したいと思います。エラーは発生していませんが、同時にブラウザには何も表示されません。フィルターが投稿を返すはずだと確信しています。body_textPostings

my view:

0 投票する
3 に答える
66683 参照

python - Django ORM - objects.filter() vs. objects.all().filter() - どちらが優先されますか?

非常に頻繁に次のような構造を目にします

デフォルトの Mananger の QuerySet を返します。最初all()はかなり冗長に思えます。

同じ結果をもたらします。

ただし、Django のドキュメントに次の 2 つのステートメントがあるため、これはデフォルトの Manager に対してのみ安全であるように思われます。

「追加のマネージャ メソッドの追加」の章からの抜粋

カスタム Manager メソッドは、必要なものを何でも返すことができます。QuerySet を返す必要はありません。

all()manager メソッドの定義:

all() 現在の QuerySet (または QuerySet サブクラス) のコピーを返します。これは、モデル マネージャまたは QuerySet のいずれかを渡して、結果をさらにフィルタリングする必要がある場合に役立ちます。いずれかのオブジェクトで all() を呼び出した後は、操作する QuerySet が確実に得られます。

これは私には少し矛盾しているように思えます。一方では、Django はマネージャ メソッドが任意のオブジェクト タイプを返すようにする自由を提供し、他方ではall()メソッドに QuerySet を必要とします。各マネージャーには、get_querysetによって呼び出されるメソッドがあることを認識していall()ます。all()しかし、カスタム マネージャーでオーバーライドするのを誰が止めますか? 私は同意しますが、そうするのは悪い設計になるでしょう。

  • 私が見る限り、このall()メソッドは QuerySet を返すことを保証していません。正確には何をMyModel.objects返しますか?このステートメントは を呼び出しall()ますか? または `get_queryset()?

  • あなたはどちらを好みますMyModel.objects.filter(...)MyModel.objects.all().filter(...)?もしそうなら、なぜですか?

  • 望ましくない方法でこれらのメソッドを台無しにする不安定なマネージャーに遭遇したことがありますか?

0 投票する
3 に答える
10991 参照

django - ジャンゴ ORM. サブクエリの結合

いくつかの Web サイトのリストを含むテーブルと、それらの統計を含むテーブルがあります。

特定の日付のすべてのサイトと統計を表示したい. 日付の統計レコードが存在しない場合、選択にはサイトのみが含まれている必要があります。

私が使用する場合:

テーブルmy_dateにレコードがないサイトは取得できません。statsこの場合、SQL クエリは次のようになります。

クエリ条件は、NULL 日付のレコードを除外し、統計のないサイトは選択に含まれません。

私の場合、すでに日付でフィルタリングされている統計テーブルに参加する必要があります。

このクエリを Django ORM に変換するにはどうすればよいですか?

ありがとう。

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

django - 逆外部キーを使用した select_related

Django には 2 つのモデルがあります。1 つ目は、どの職務 (役職) が他のどの役職に報告するかという階層を持ち、2 つ目は、従業員とその役職です。

Person レコードがあり、その人の上司を見つけたい場合は、次のようにする必要があります。

で人を取得している場合QuerySet、 を使用して position と report_to に参加できます (データベースへの 2 回目のトリップを回避できます)Person.objects.select_related('position', 'position__reports_to').filter(...)が、person_set を取得するためにデータベースへの別のトリップを回避する方法はありますか? 'position__reports_to__person_set'にorを追加しようとしposition__reports_to__personましたselect_relatedが、クエリは変更されないようです。これは何prefetch_relatedのためですか?

Person レコードを取得するためのクエリを実行するときに、データベースへの往復を行わずに、PositionHeirarchy とそのマネージャーの Person レコードも取得できるように、カスタム マネージャーを作成したいと考えています。これは私がこれまでに持っているものです:

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

django - さまざまなモデルにまたがる注釈付きの複雑なクエリセット

私はDjango 1.6を使用しており、次のモデルがあります(読みやすくするために少し簡略化されています):

(querysetマネージャーで) を使用して、特定の日付に利用可能なすべての部屋を取得したいと思います。つまり、max_persons満たされていない場所です。

これまでのところ、Qいろいろいじってみましたが、比較Room.objects.filter(hospitalization__date_out__lt="2014-04-25")がわかりません。max_persons

アイデアはありますか?

編集

各部屋に関連する Person オブジェクトの数は、その部屋の人数を表しています。

したがって、以下のカールの提案に従って、私は遊んでみました:

  • Room.objects.filter(hospitalization__date_out__lte="2014-04-25").annotate(num_persons=hospitalization_set__stay__person.Count()).exclude(num_persons__lte=max_persons)
    • 収量NameError: name 'hospitalization_set__stay__person' is not defined
  • Room.objects.filter(hospitalization__date_out__lte="2014-04-25").annotate(num_persons=Count('hospitalization_set__stay__person')).exclude(num_persons__lte=max_persons)
    • 収量FieldError: Cannot resolve keyword 'hospitalization_set' into field.
  • Room.objects.filter(hospitalization__date_out__lte="2014-04-25").annotate(num_persons=Count('hospitalization__stay__person')).exclude(num_persons__lte=F('max_persons'))
    • []現在の DB によると、少なくとも 3 つの結果が期待されますが、何も得られません ( )。
    • を削除.exclude()しても、まだ結果が得られません。.annotate()私が使っているのは何か間違っているようです。
0 投票する
1 に答える
1657 参照

django - パラメータをdjangoモデルマネージャのget_querysetメソッドに渡す方法は?

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

mysql - Django モデルのマネージャー内で SQL クエリを拡張しますか?

これは、マネージャーの使用を説明する django docsのコードです。

このコードに基づいて 2 つの質問があります。

1) どこr.poll_idから来たの? ResponseOpinionPollforeignKeyと関係があることを理解しています。OpinionPollテーブルとResponseテーブルを結合するには、ID で結合する必要がありますただし、 Responseでポーリング ID にアクセスするには、r.poll.id を実行します。構文は、MySQL 構文です。r.poll_id

なぜ GROUP BY p.id、p.question、p.poll_date? GROUP BY p.id だけでは不十分なのはなぜですか?

2) 上記の生の SQL クエリを django ORM クエリに変換することは可能ですか?もしそうなら、それはどのように見えるでしょうか?

私は SQL の専門家ではありません。ばかげているように聞こえるかもしれませんが、ご容赦ください

編集:

Django の外部で OpinionPoll および Response テーブルを作成したい場合、SQL ステートメントはどのようになりますcreateか?

Django シェルで実行すると、

python manage.py sqlall appname

私は以下を取得します:

REFERENCES "myapp_opinionpoll"以上のようなものが見えますCREATE INDEX。これがSQLでどのように行われるかはわかりませんか?