問題の説明
フィールドのDateTimeField型タイプがxadminバックエンドの管理インターフェイスで、存在する場合モデルの作成では、モデルの動作時間を追加し、範囲外のリストインデックスを報告します。
この記事は、モデル上で作成されました:
クラスIDC(models.Model): 名前 = models.CharField(max_lengthを= 64 ) 接点 = models.CharField(MAX_LENGTH = 32 ) 電話 = models.CharField(MAX_LENGTH = 32 ) アドレス = models.CharField(MAX_LENGTH = 128 ) CREATE_TIME = models.DateField(auto_now = 真) デフ__str __(自己): リターンself.name クラスメタ: verbose_name = " IDC机房" verbose_name_plural = verbose_name
次のようにフィールド型モデルCREATE_TIMEは改正しました:
CREATE_TIME = models.DateTimeField()
、xadminシステムのログを「IDCの部屋」の管理インターフェイスを入力し、[追加]ボタンをクリックし、それが問題を再現します。
問題の二つの原因
情報与えられた最初のすべてのは、すでにコードのエラーを指摘しました:
venv \ libに\のsite-packages \ xadmin \ widgets.pyレンダリングでは、ライン80
特定のコードを見つけるために、プロンプトディレクトリに従ってください:
デフ(自己、名前、値、attrsに=レンダリングなし): input_html = [HT のための HT でスーパー(AdminSplitDateTime、自己).render(名前、値、attrsに).split(' \ nは')の場合、HT!= '' ] #リターンinput_html リターン mark_safe(" <DIV CLASS = "日時clearfix"> <DIV CLASS = "入力グループ日付ブートストラップ日付ピッカー"> <スパンクラス= "入力グループアドオン"> <Iクラス=" FA FA-カレンダー"> </ I> </ span>の%S ' ' <スパンクラス="入力グループ-BTN "> <ボタンクラス=" BTN BTNデフォルト」タイプ= "ボタン">%S </ボタン> < /スパン> </ div> ' ' <DIV CLASS = "入力グループタイムブートストラップclockpicker"> <スパンクラス= "入力基アドオン"> <I CLASS = "FA FA-クロック-O"> ' ' </ I> </ span>の%sの<スパンクラス=」入力グループ-BTN "> <ボタンクラス=" BTN BTNデフォルト」タイプ= "ボタン">%S </ボタン> </スパン> </ div> </ div> '%(input_html [ 0 ]、_ (U ' 今日')、input_html [ 1 ]、_(U ' 今')))
コードの最後の行の上に投稿されましたが、コードの最初の80行widgets.pyです。
input_htmlだけ一つの要素は、次のエラーメッセージからの値input_htmlを見つけることができるのでinput_html [1]はエラーコードです。
【' の<input type = "text"の名= "create_time_0"クラス= "日付フィールドフォームコントロール' ' admindatewidget"サイズ= "10"に必要なID = "id_create_time_0" /> <入力' ' TYPE = "text"の名= "create_time_1"クラス= "時間フィールドフォームコントロール' ' admintimewidget"サイズ= "8"に必要なID = "id_create_time_1" /> ' ]
コードを読んだ後、次は、このコードが使用する「\ n」は二つのタグ離れinput_htmlが、2つのラベル間には改行で、それはエラーを生じる、分割することができないことがわかります。
input_html = [HT のための HT でスーパー(AdminSplitDateTime、自己).render(名前、値、attrsに).split(' \ nは')の場合、HT!= '' ]
著者が書かれていた、しかし、確かに離れて2を保持することができ、なぜ急に成功?
次のテンプレートは見つかり生成されたコード2つのラベルを表示し続けます。
venv \ Libの\のsite-packages \ジャンゴ\フォーム\テンプレート\ジャンゴ\フォーム\ウィジェット\ multiwidget.html
HTMLテンプレートのコードは次のとおりです。
{%spaceless%} {%ためのウィジェットで widget.subwidgetsの%} {%ENDFOR%} {%のendspacelessの%} {%がwidget.template_name%を含みます}
spacelessタグ:
使用方法:{%のspacelessの%} ...概要... {%endspacelessの%}
意味:全て囲まタブまたはキャリッジリターン文字コンテンツを削除
spacelessを参照してください、ラベル上の問題の嘘を推測し、ラベルがDjangoの後に追加のこのバージョンと推測されます。
コードの表示Djangoは、投機を確認するために、レコードを提出Django2.0.1バージョンとバージョン1.11.9で、のこぎり、次のように提出した追加のspacelessのレコードレーベル、レコードを提出します:
https://github.com/django/django/commit/47681af34447e5d45f3fdb316497cdf9fbd0b7ce
https://github.com/django/django/commit/c1d57615ac60171a73e1922a48ebc27fe513357e
スリー問題解決のための
オプションの一つ
の問題は、テンプレートファイルが原因であるため、フォームに、その後、削除spacelessタグ、テンプレートコードをspacelessラベルのリードを追加、問題を解決することはできないのですか?
{%ためのウィジェットに widget.subwidgets%} {%ENDFOR%} {%がwidget.template_name%を含みます}
答えはイエスである、私たちは本当に問題を解決することができます。
しかし、spacelessタグが追加のコードのようにDjangoのバグ修正され、削除、削除することはお勧めしません、明確な問題は、他の場所で発生しません。
スキームIIは、
以来「\ n」はタグはその後「/> <」スプリットを使用して、別の方法で分割し、分割することはできません。
オリジナルコード:
input_html = [HT のための HT でスーパー(AdminSplitDateTime、自己).render(名前、値、attrsに).split(' \ nは')の場合、HT!= '' ]
コードを変更した後:
input_html = [HT のための HT でスーパー(AdminSplitDateTime、自己).render(名前、値、attrsに).split(' /> < ')の場合、HT!= '' ] input_html [ 0 ] = input_html [ 0 ] + " /> " input_html [ 1 ] = " < " + input_html [ 1 ]