[解決済み] Django はどのようにしてフォームフィールドのレンダリング順序を知るのでしょうか?
2022-12-11 20:30:56
質問
以下のような Django フォームがあるとします。
class ContactForm(forms.Form):
subject = forms.CharField(max_length=100)
message = forms.CharField()
sender = forms.EmailField()
そして、このフォームのインスタンスの as_table() メソッドを呼び出すと、 Django は上で指定したのと同じ順序でフィールドをレンダリングします。
私の疑問は、クラス変数が定義された順番を Django がどうやって知ることができるのか、ということです。
(また、この順序をどのように上書きすればよいのでしょうか。例えば、クラスの init メソッドからフィールドを追加したい場合などには、どのようにこの順序を上書きするのでしょうか?)
どのように解決するのですか?
私は先に進み、自分の質問に答えました。 以下は今後の参考のための回答です。
Djangoでは
form.py
は暗黒の魔法を使って
__new__
メソッドを使って、最終的にクラス変数を
self.fields
にロードします。
self.fields
は、Django の
SortedDict
のインスタンスです (定義されているのは
datastructures.py
).
これを上書きするために、例えば私の例では送信者を先にしたいが、送信者を init メソッドで追加する必要がある場合、次のようにします。
class ContactForm(forms.Form):
subject = forms.CharField(max_length=100)
message = forms.CharField()
def __init__(self,*args,**kwargs):
forms.Form.__init__(self,*args,**kwargs)
#first argument, index is the position of the field you want it to come before
self.fields.insert(0,'sender',forms.EmailField(initial=str(time.time())))
関連
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
-
[解決済み] Django のフォームで、あるフィールドを編集できないように readonly (または disabled) にするにはどうしたらいいですか?
-
[解決済み】Djangoでnull=Trueとblank=Trueの違いは何ですか?
-
[解決済み] Pythonです。未束縛のメソッドを束縛する?
-
[解決済み] Spyderを仮想環境で動作させるには?
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] djangoのQueryDictをPythonのDictに変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] 文字列から先頭と末尾のスペースを削除するには?
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] virtualenvsはどこに作成するのですか?
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
-
[解決済み] 新しいpip backtrackingの実行時問題の解決
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?