問題タブ [inline-formset]
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.
python - Django のインライン フォームセットと選択肢フィールドが生成する db クエリが多すぎる
私は、多くの外部キー フィールドを持つモデルを持っています。たとえば、フィールド 'type'、'level'、'color'、'intensity' (単なる一般的な例) を持つモデル Product です。
次に、インライン フォームセットとして製品を含むタイプ フォームを使用して、特定のタイプのすべての製品を編集するページを作成しますextra=10
。
私が非常に奇妙に感じるのは、テンプレートの外部キー選択フィールドの1つを出力するたびに、Djangoがオプションを取得するためにデータベースにクエリを実行することです(毎回)。
例えば:
20 個の製品 (および 10 個の空の追加フォーム) を使用すると、上記のコードselect * from ...
はレベル、色、および強度から 30 個を発行し、合計 90 個のクエリ (Django デバッグ ツールバーを使用して表示) を発行します (3 個で十分なはずです)。オプションがリクエストの途中で変更される可能性はほとんどありませんが、変更されたとしても、新しく追加されたオプションが最後の 5 つのフォームだけに表示されることは絶対に望んでいません。
データベースが不必要にこのように叩かれないように、モデル/フォーム/ビュー/テンプレートを最適化する方法はありますか?
-
免責事項:私はdjangoとpythonに比較的慣れていないため、何らかの方法でこれに対処する方法が必要だと考えずにはいられません。
django - Django Admin Inlines の編集不可フィールドの初期値を設定する
私のサイトは複数の言語をサポートしています。サポートされている言語に対応する 1 つまたは複数の翻訳オブジェクト (CategoryTranslation) を持つ必要があるオブジェクト (Category) があります (それらはそれほど単純ではないため、翻訳アプリの使用を勧めないでください)。さらに、依存オブジェクトには、それらを作成および最終更新するユーザーへのリンクがあります。
カテゴリー管理パネルで以下を行いたい:
- カテゴリ フィールド。
- 既存の言語によって初期化されたインラインの CategoryTranslation オブジェクト。たとえば、私のサイトではロシア語と英語をサポートしており、2 つ (2 つだけ) のインラインを表示する必要があります。
- カテゴリの保存後、新しい CategoryTranslation は現在のユーザーと等しい created_by フィールド値を取得し、編集された CategoryTranslation は現在のユーザーと等しい edit_by フィールド値を取得する必要があります。
これが私が今やったことです:
ご覧のとおり、CategoryTranslationAdmin の max_num フィールドは 0 で、追加の翻訳が追加されるのを防ぎます。フォーム セットの total_form_count メソッドは、サポートされている言語の数と、フォームの作成時に使用可能な言語で初期化されたフォームを返します。
更新 また、現在のユーザーを save_formset(self, request, form, formset, change) メソッドで formset に設定し、それを使用して、 CategoryTranslationFormSet クラスの save() メソッドで変更されたオブジェクトのフィールドに入力します。
それが正しいか?
だから今私は必要です:
- language_code フィールドを read_only にします (単純に readonly_fields タプルに追加すると、フォームで初期化できなくなります)。
- 理解してください、保存する前にユーザーを追加する私の解決策は正しいです。
django - DJANGO: リテラルの「モデル オブジェクト」ではなく、モデル オブジェクト名を形式でレンダリングする方法は?
次のモデルがあります:部門、プロジェクト、部門プロジェクト、従業員、およびメンバーシップ。部門には多くのプロジェクトがあり、プロジェクトにはメンバーシップを通じて役割が割り当てられた多くの従業員がいます。EU が従業員の役割を複数のプロジェクトに割り当てることができるように、InlineFormset を作成しようとしています。
私のテンプレートは正しいラベルとフィールドをレンダリングしますが、Departmentprojects のラベルとフィールドにはプロジェクトの名前が表示されません。「Departmentprojects オブジェクト」のみが表示されます。「Departmentprojects オブジェクト」の代わりにプロジェクトの名前をレンダリングするフォームを取得するにはどうすればよいですか?
--
ブラウザの現在のテンプレート:
Departmentproject ラベル: (「Departmentprojects オブジェクト」としてリストされた 2 つのオプションを含むドロップダウン メニュー) 役割: プロジェクト マネージャー
ブラウザで必要なテンプレート:
部署プロジェクト名 1: プロジェクトマネージャー
部署プロジェクト名 2: その他の役割
--
モデル:
--
見る
--
テンプレート
django - DJANGO: inlineformset クエリセットを制限する方法
EU はこのフォームを使用して、特定のプロジェクトで果たす役割 (プロジェクト マネージャー、開発者など) を選択できます。プロジェクト フィールドのオプションを従業員部門のオプションのみに制限したいと考えています。現在、EU は任意の部門のプロジェクトを選択できます (ただし、部門は選択できません。私はそれを完全に除外しました)。queryset=blabla は動作しません..
モデル:
見る:
JSON: MANAGE.PY DUMPDATA TESTDB --INDENT=4
django - Django:「UniqueTogether」で保存し、inlineformsetを介してオブジェクトを削除すると、エラーページが発生します
これが簡単な修正である場合は申し訳ありませんが、インラインフォームセットで2つの問題が発生しています。
無効なオブジェクト(一意の一緒の要件を満たしていない)を保存すると、フォームにエラーが表示されるのではなく、エラーページがスローされます。
ある時点で、無効なオブジェクトを保存するときにエラーが正しく表示されていましたが、有効なオブジェクトを保存しようとすると、membership.departmentがnullであるというエラーが発生しました。そのため、「たとえばインスタンス」を配置しましたが、無効なオブジェクトを保存するときにエラーが表示されないという新しい問題が発生します。
有効なオブジェクトを削除するときにも同じ問題が発生します。オブジェクトは適切に削除されますが、それでもエラーページが表示されます...
私は途方に暮れています。
無効なオブジェクトを保存すると、次のようになります。
有効なオブジェクトを削除すると、次のようになります。
モデル:
VIEW.py
django - djangoのカスタムフォームセットのクリーンメソッドで「DELETE」パラメータをFalseにリセットする方法
カスタムクリーンメソッドを使用してカスタムフォームセットを作成しました。次のようになります。
フォームセットからいくつかのフォーム(間違ったパラメーターを使用)を削除して送信ボタンを押すと(フォームにはDELETEフィールド値== Trueがあります)error = True
、クリーンメソッドに入るため、ValidationErrorが発生してフォームウィンドウに戻ります。ただし、フォームの DELETE フィールドの値はリセットされません。次にフォームを送信すると、同じ ValidationError が返されます。それで、どうにかして私のカスタム clean メソッドの DELETE フィールドの値を変更できますか?
python - formset、inlineformset_Factory および kwargs
モデル A とモデル B と呼ぶモデルがいくつかあります。B から A への外部キーがあります。
つまり、A と B の間のカーディナリティは 1:n です。
MF_B という B に対応する ModelForm を作成しました。Bで定義する追加のフィールドがあります。例
上記のコードが示すように、ここでは選択肢にクエリセットを入力します。(スタッフ フィールドにクエリセットを設定するために使用するinit ()のオーバーライド コードを省略しました)
取引は、inlineformset_factory を使用して、1 つのページに A のフォームと B の複数のフォームを作成したいということです。
たくさんの新しい kwargs を inlineformset_factory に渡したかったのですが、予期しないキーワード引数について不平を言い続けていました.djangoでバックエンド コードを見た後、理由がわかりました.inlineformset_factory はカスタム kwargs を取りません. メソッド sig で定義された kwargs のみを取ります。
クエリセットに返されるオブジェクトをフィルター処理するには、self.request.user を渡す必要があるため、icanは formfield_callback を使用できないと思います。
助言がありますか?
python - AJAX経由でDjangoフォームの値を設定する方法
データ作成のための AJAX 呼び出しで Django 生成フォームを使用しようとしています。単純な ModelForm が機能しているだけですが、それに inlineformset を追加すると、いくつかの非表示の id フィールドにどの値を入力する必要があるか分からなくなります。すべての送信は新しいインスタンスを作成しています。住所のある学校の場合、保存ビューにこれがあります:
これは、フォームにデータを入力する JS です。#id_address_set-0-school
と#id_address_set-0-id
は、2 つの Django 生成フィールドです。
私がそこに置くべきアイデアはありますか?
django - ModelFormのインラインのようなDjango管理者
自分の非管理者ModelFormのFKdモデルに関連モデルを追加するために、Django管理者のインラインを複製しようとしています。特に、StackeAdminInlineを使用していて、Javascriptの「+ Add another XXX」ビットを取得して、関連するモデルをさらに追加する場合。
管理者がそれを行うことができれば可能であるに違いありませんが、これを行う方法の例を含むプロジェクトを見つけることができません。誰かが私に何かを向けることができますか?Crispy Formsを使用していますが、必要に応じて使用しないでください。https://github.com/runekaagaard/django-crispy-forms-fancy-formsetsを見ましたが、これはCrispyのメンテナーには好まれなかったようで、これを行うにはもっとDjangoicの方法があるはずだと考えていました。管理者はすでにそれを行うことができます。
ありがとう!
django - フォームを発生させる.ValidationErrorが機能しない
私は次のモデルを持っています:
プロジェクトの作成フォームに、マイルストーン用のインライン フォームセットを含めました。
プロジェクトが提出されたときに、少なくとも 4 つのマイルストーンが作成され、すべてのマイルストーンの Budget_percentage の合計が 100 になることを検証したい
これは私のフォームです:
3 つの空のマイルストーン フォームを含むフォームを送信すると、最初のフォームについては何もしません。ValidationError(...)
raise Exception() で実際に if に入ることを確認しましたが、何も起こらないかのように続行します。
それは私のコードのエラーですか、それとも ValidationError の誤解された概念ですか?
事前に感謝します。
編集:
欠落していたビューコードを追加しています