問題タブ [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 - フィールドからマネージャーを追加する方法
私がやりたいのは、一部のモデルが私のフィールドを使用すると、そのモデルにカスタムマネージャーが自動的に追加されることです。
私の知る限り、contribute_to_class はそのような機能を提供します
問題は、カスタム マネージャーで self.model._default_manager を使用してデフォルト マネージャーでクエリを実行することですが、それを実行しようとすると、django は AttributeError: 'NoneType' object has no attribute '_default_manager' と言います。
Contribut_to_class を使用せず、モデル クラスの横にカスタム マネージャーを記述した場合、期待どおりに動作します。何が問題になる可能性がありますか?
python - Django マネージャーの連鎖
複数のマネージャーを連鎖させて、個々のマネージャーの両方の影響を受けるクエリ セットを生成することが可能かどうか (可能な場合はその方法) を考えていました。私が取り組んでいる具体的な例を説明します。
他のモデルに小さな特定の機能を提供するために使用する複数の抽象モデル クラスがあります。これらのモデルのうちの 2 つは、DeleteMixin と GlobalMixin です。
DeleteMixin は次のように定義されます。
基本的に、オブジェクトを実際に削除する代わりに、疑似削除 (削除済みフラグ) を提供します。
GlobalMixin は次のように定義されています。
任意のオブジェクトをグローバル オブジェクトまたはプライベート オブジェクト (公開/非公開のブログ投稿など) として定義できます。
これらには両方とも、返されるクエリセットに影響を与える独自のマネージャーがあります。私の DeleteManager はクエリセットをフィルター処理して、削除済みフラグが False に設定されている結果のみを返しますが、GlobalManager はクエリセットをフィルター処理して、グローバルとしてマークされた結果のみを返します。両方の宣言は次のとおりです。
望ましい機能は、モデルがこれらの抽象モデルの両方を拡張し、削除されていないグローバルな結果のみを返す機能を付与することです。4 つのインスタンスを持つモデルでテスト ケースを実行しました。SomeModel.objects.all() などの結果セットを取得しようとすると、インスタンス 1 と 3 が取得されます (削除されていない 2 つのインスタンス - すばらしい!)。SomeModel.objects.globals() を試すと、DeleteManager にグローバルがないというエラーが表示されます (これは、モデル宣言がそのようなものであると想定しています: SomeModel(DeleteMixin, GlobalMixin)。順序を逆にすると、そうではありません。エラーは発生しますが、削除されたものは除外されません)。
これと似たような状況に遭遇し、結果に至った人がいるかどうかはわかりませんでした。私の現在の考え方でそれを機能させる方法、または私が求めている機能を提供する再作業のいずれかが非常に高く評価されます. この投稿が少し長くなっていることは承知しています。さらに説明が必要な場合は、喜んで提供します。
編集:
この特定の問題に使用した最終的な解決策を以下に投稿しました。これは、Simon のカスタム QuerySetManager へのリンクに基づいています。
django - Djangoで異なる設定で単体テストを行う方法は?
単体テストの Django 設定をオーバーライドする簡単なメカニズムはありますか? モデルの 1 つに、特定の数の最新オブジェクトを返すマネージャーがいます。返されるオブジェクトの数は、NUM_LATEST 設定によって定義されます。
これにより、誰かが設定を変更した場合、テストが失敗する可能性があります。setUp()
の設定をオーバーライドして、後で復元するにはどうすればよいtearDown()
ですか? それが不可能な場合、メソッドにモンキー パッチを適用するか、設定をモックする方法はありますか?
編集:これが私のマネージャーコードです:
マネージャーはsettings.NEWS_LATEST_MAX
クエリセットをスライスするために使用します。はgetattr()
、設定が存在しない場合にデフォルトを提供するために使用されます。
django - djangoマネージャーの問題
私は次のモデルを持っています:
そしてマネージャー
とき、UserProfile.obgets.get_active_members()のようなものを呼び出そうとします
私は
AttributeError:UserProfileインスタンスを介してマネージャーにアクセスできません
手伝ってもらえますか
django - 注釈付きの Django クエリから非アクティブなコメントをフィルタリング/除外する方法は?
汎用ビューを使用してobject_list
一連の記事をすばやく一覧表示しています。各記事にはコメントが添付されています。クエリは、Count()
コメントの数に対する注釈を使用し、次にorder_by()
その注釈付きの番号を使用します。
コメントはdjango.contrib.comments
フレームワークの一部であり、Generic Relationship を介してモデルに添付されます。Article モデルに明示的な逆ルックアップを追加しました。
問題は、これが「非アクティブ」なコメントをカウントすることです。is_public=False
またはを持つものis_removed=True
。非アクティブなコメントをカウントから除外するにはどうすればよいですか?
python - djangoマネージャコードはどこに置くべきですか?
これは非常に単純な django パターンの質問です。私のマネージャー コードは通常 models.py にありますが、models.py が本当に巨大な場合はどうなりますか? 保守性を高め、循環インポートを回避するために、マネージャー コードを models.py に置く他の代替パターンはありますか?
なぜ models.py がこれほど巨大なのかという疑問が生じるかもしれませんが、そのサイズと有用性の幅が正当であると仮定しましょう。
django - Django カスタム マネージャー - ログイン ユーザーが作成したオブジェクトのみを返すにはどうすればよいですか?
カスタム オブジェクト モデル マネージャーを上書きして、特定のユーザーが作成したオブジェクトのみを返すようにしたいと考えています。管理者ユーザーは、オブジェクト モデル マネージャーを使用してすべてのオブジェクトを返す必要があります。
今、私はうまくいく可能性のあるアプローチを見つけました。彼らは、次のような独自のミドルウェアを作成することを提案しています。
また、カスタム マネージャーでは、get_current_user()
メソッドを呼び出して、特定のユーザーが作成したオブジェクトのみを返すことができます。
これは、このユースケースに対する適切なアプローチですか? これは機能しますか?それとも「大槌で木の実を割る」ようなものですか?;-)
ちょうど使用:
それぞれのビューでは、私にはあまりきれいに見えません。
編集このミドルウェアアプローチを使用しないでください!!!
以下のJack M.が述べたアプローチを使用してくださいしばらくテストした後、このアプローチは非常に奇妙に動作し、このアプローチではグローバル状態と現在のリクエストを混同します。
以下に示すアプローチを使用します。とても簡単で、ミドルウェアをいじる必要はありません。
現在のユーザーまたは他のユーザーを入力として期待する関数を使用して、モデルにカスタム マネージャーを作成します。
ミドルウェア アプローチに関するこのディスカッションも参照してください。
django - Django:この大きなモデル/マネージャー/デザインの混乱をどのように整理しますか?
悪い例に入る前に要約すると、他:すべてのモデルでコードを記述して、現在ログインしているアカウントに選択肢を制限する必要がないアプリケーションを作成しようとしています(使用していません)認証、またはアカウントまたはログインの組み込み機能)。
つまり、私はこのようなことをする必要はありません:
私のアイデアはAccount(models.Model)
、次のカスタムマネージャーを使用してモデルを作成し、すべてのモデルでマルチテーブル継承を使用してモデルをサブクラス化することです。しかし、それは私に大きな脳の痛みを与えています。account
各モデルに外部キーが必要ですか?特定のモデルインスタンスの親クラスアカウントにアクセスできますか?
激しい構文エラーは無視してください。このすべてをここに入力しました。
これを行うためのアイデアを思いついたのはここです:Django名前空間プロジェクト
django - Django:マネージャ内からモデルのインスタンスにアクセスするにはどうすればよいですか?
私が探している魔法は「uncle=model_thats_using_this_manager_instance.uncle」です。どうにかしてこれができればいいような気がします。モデルを取得すると言うことはできますself.model
が、インスタンスを取得するにはどうすればよいでしょうか?
django - Django: この状況で抽象的な基本モデルを使用するのは良い考えですか?
多くのモデルがあり、どこにでも外部キーを置かなければならない時間を節約したい場合、これは正しいですか? それとも、私はこれをすべて間違って考えていますか?