範囲エラーのうち、Python3.6.5 + Django2.0が統合xadmin背景[追加]をクリックし、コンテンツの詳細デイリーリストインデックスを解きます

問題の説明
フィールドの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 ]

 



おすすめ

転載: www.cnblogs.com/zmdComeOn/p/11966117.html