問題タブ [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.
django - Djangoでカスタムマネージャオブジェクトが機能しない?
これが私models
のmanager
クラスです。問題は下にあると思いPostingFilterManager
ます。title
彼らは私がキーワードを検索する方法body_text
が間違っています。以下のモデルkeywords
内title
およびモデルのリストを照会したいと思います。エラーは発生していませんが、同時にブラウザには何も表示されません。フィルターが投稿を返すはずだと確信しています。body_text
Postings
my view:
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(...)
?もしそうなら、なぜですか?望ましくない方法でこれらのメソッドを台無しにする不安定なマネージャーに遭遇したことがありますか?
django - ジャンゴ ORM. サブクエリの結合
いくつかの Web サイトのリストを含むテーブルと、それらの統計を含むテーブルがあります。
特定の日付のすべてのサイトと統計を表示したい. 日付の統計レコードが存在しない場合、選択にはサイトのみが含まれている必要があります。
私が使用する場合:
テーブルmy_date
にレコードがないサイトは取得できません。stats
この場合、SQL クエリは次のようになります。
クエリ条件は、NULL 日付のレコードを除外し、統計のないサイトは選択に含まれません。
私の場合、すでに日付でフィルタリングされている統計テーブルに参加する必要があります。
このクエリを Django ORM に変換するにはどうすればよいですか?
ありがとう。
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 レコードも取得できるように、カスタム マネージャーを作成したいと考えています。これは私がこれまでに持っているものです:
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()
私が使っているのは何か間違っているようです。
mysql - Django モデルのマネージャー内で SQL クエリを拡張しますか?
これは、マネージャーの使用を説明する django docsのコードです。
このコードに基づいて 2 つの質問があります。
1) どこr.poll_id
から来たの? ResponseはOpinionPollforeignKey
と関係があることを理解しています。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でどのように行われるかはわかりませんか?